【问题标题】:Can flags defined in Makefile using '-D' be used within header files?可以在头文件中使用使用“-D”在 Makefile 中定义的标志吗?
【发布时间】:2012-08-30 16:16:02
【问题描述】:
我注意到我在编译行 (g++) 上定义为 -D__SOME_FLAG=1 的标志在头文件中使用时似乎没有达到预期的效果。即:包含在#ifdef __SOME_FLAG ... #endif 中的代码似乎没有被编译。我总是可以在标题中使用#define 来完成这项工作。但理想情况下,我希望能够在一个地方进行更改(即:Makefile)。
我想知道我正在尝试的是否可行?
谢谢
【问题讨论】:
标签:
makefile
g++
conditional-compilation
【解决方案1】:
是的,这应该是可能的,而 -D 标志正是为此而设计的。
请查看http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options
根据我在那里读到的内容,也许您应该使用 -D symbol=value 和它们之间的空格,或者使用带有引号的 -D"symbol=value"。但是我没有尝试,因为我的笔记本电脑的电池目前正在耗尽:)
编辑:
抱歉,只记得在 linux 上不应该有空格,所以你的命令行 -D__SOME_FLAG=1 应该正确地将“__SOME_FLAG”设置为 1。如果你不是在 linux 上而是在 windows 上,你可以尝试使用空格,但我怀疑。此外,如果 GCC 是旧的或时髦的,它实际上可能会忽略 -D 之后的第一个字符,因此可以定义一个“_SOME_FLAG”。我见过几次,但只在一些非常有问题的端口上..
顺便说一句。也许其他的东西#undefs它?或者您可能忘记将该标志添加到所有文件的所有编译中? -D 选项仅用于当前编译的文件,因此如果您的 Makefile 中有多个 gcc 调用,您可能只将标志添加到其中一些。这通常是我的问题,因为我倾向于只将 -I 和 -D 标志放在第一位,而忘记其他模块..