【问题标题】: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 标志放在第一位,而忘记其他模块..

    【讨论】:

    • 我认为问题,可能是一些陈旧的文件。
    猜你喜欢
    • 2020-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2011-06-04
    • 2015-12-27
    • 2020-11-03
    相关资源
    最近更新 更多