4

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

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

谢谢

4

1 回答 1

2

是的,这应该是可能的,而 -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 标志放在第一位,而忘记其他模块..

于 2012-09-05T21:26:54.320 回答