我给了应该在GNU / Linux的编译的项目。正如你可能已经猜到,在该项目的所有头使用反斜杠符号\
。
我知道,反斜杠是undefined behavior,但我需要编译它。我敢肯定有办法让这个海湾合作委员会的工作,因为MinGW的版本工作正常的反斜杠(我刚查了这一点)。
最有趣的事情是,该项目是在GNU / Linux的应用程序(用于ARM architecture),并有可能在ARM GCC工作得很好。我只是谁本地使用GNU / Linux和想编译一个桌面have an easier debug life应用程序的唯一的家伙。
更换反斜杠反斜杠,迫使同行重新学习使用其它字符是不一样:我只是一个小字辈,但同事谁已经4-7年已经在这里工作;他们只是不会听我的。所以,在这里我们去...
没有一点SED无法修复:)
sed -i '/#include/s/\\/\//g' *.c *.h
更换用斜杠反斜杠。告诉你的同事来看看这个堆栈溢出职位。
我已经写C代码为超过24年。反斜线是完全错误的。如果要紧(在事实上,这不,自从Windows乐于使用正斜杠作为路径分隔符,如果提出与他们),这将是达到C编译器来改造他们。
你可能意味着#include
预处理指令,为文件名相关反斜杠。
我们都知道这是错误的#include
-d的路径使用反斜线
目前据我所知没有简单的方法来神奇地将其转化为普通(师)slashs,因为大多数#include
处理的是有关查询的主机操作系统的文件系统(通fopen(3)调用open(2)等....)
(如果你有很多时间可以浪费,你可以考虑肮脏qazxsw POI技巧超载qazxsw芋泥等...我不建议这样做)
你可以更简单地使用LD_PRELOAD
更改(例如,在你的fopen
,或者在您自己的sed(1)脚本调用真正的Makefile
,用合适的$HOME/bin/gcc
....)反斜线,当他们出现在/usr/bin/gcc
线(只有在这样行) 。
看看GCC源代码里面,它是免费软件,尤其是文件$PATH
(负责处理预处理指令);随意打补丁您离奇的需求,以及地方发布自己的补丁!
GCC并不关心一个位在#include
指令libcpp/directives.c和<
之间有什么。它只是通过一切归因于操作系统。如果你的操作系统发现它,然后GCC对其进行处理。如果不是这样,它没有。如果您在源在你的Linux目录下名为>
(可以)的文件,并#include
,它会被发现。
你可以告诉你的同事推他们的傲慢和解决他们的断码。