使用'-D'在Makefile中定义的标志是否可以在头文件中使用?

时间:2012-09-05 21:22:27

标签: makefile g++ conditional-compilation

我注意到在编译行(g ++)中我定义为-D__SOME_FLAG = 1的标志,当在头文件中使用时,似乎没有所需的效果。 ie:包含在#ifdef __SOME_FLAG ... #endif内的代码似乎没有被编译。我总是可以在标题中使用#define来完成这项工作。但理想情况下,我希望能够在一个地方进行更改(即:Makefile)。

我想知道我的尝试是否可行?

感谢

1 个答案:

答案 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标志,而忘记其他模块..