我注意到在编译行(g ++)中我定义为-D__SOME_FLAG = 1的标志,当在头文件中使用时,似乎没有所需的效果。 ie:包含在#ifdef __SOME_FLAG ... #endif
内的代码似乎没有被编译。我总是可以在标题中使用#define来完成这项工作。但理想情况下,我希望能够在一个地方进行更改(即:Makefile)。
我想知道我的尝试是否可行?
感谢
答案 0 :(得分:2)
是的,它应该是可能的,-D标志就是那个。
请检查http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options
从我在那里读到的,也许你应该使用-D symbol=value
和它们之间的空格,或-D"symbol=value"
和引号..但我没有尝试,因为我的笔记本电脑的电池正在死亡:)< / p>
编辑:
对不起,记得在linux上应该没有空格,所以你的命令行-D__SOME_FLAG=1
应该正确设置“__SOME_FLAG”为1.如果你不是linux而不是windows,你可以试试空间,但我怀疑。此外,如果GCC是旧的或时髦的,它实际上可能忽略-D之后的第一个字符,因此可以定义“_SOME_FLAG”。我已经看过几次,但只是在一些非常错误的港口..
顺便说一句。也许其他#undefs呢?或者您可能忘记将该标志添加到所有文件的所有编辑中? -D选项仅用于当前编译的文件,因此如果Makefile中有多个gcc调用,则可能只将标记添加到其中一些。这通常是我的问题,因为我倾向于首先放置-I和-D标志,而忘记其他模块..