GCC 是否可以测试源文件中是否存在定义的符号



gcc make 是否可以测试其中一个源文件中是否存在定义,即。

伊菲克 (DEFINED_BLAH_BLAH,3( @echo等于 3 还 @echo不等于 3 恩迪夫

我已经看过这个并扩展评论中的建议,您可以执行以下操作。不优雅,可能不是最好的解决方案,但它有效:

echo -ne "#if 1==MYVALn0n#elsen1n#endifn" | cpp -P -imacros test.h

或者通过gccg++来调用它:

echo -ne "#if 1==MYVALn0n#elsen1n#endifn" | 
gcc -Xpreprocessor -P -E -imacros test.h -

这些将返回 shell 样式0(对于在test.h中定义并1MYVAL(或1可以在make/shell 中测试的stdout

您可能还希望去除附加| grep -v '^$'的所有空白行。

对上述内容进行详细说明。我创建(echo(作为简单的文件,我通过预处理器运行,该预处理器检查给定宏的相等性,并导致输出中出现01-Pcpp,因为它不是真正的 C 文件,我们不需要输出中的任何额外位。-imacros表示保留该文件中定义的宏,但丢弃通过处理它生成的任何输出。

还应该注意的是,如果您有任何条件定义需要考虑传递给编译器的任何定义,则还需要将它们传递给此cpp运行。

还要注意你是否test.h头文件,你知道应该包括宏定义。或者main.c是包含该(和其他(标头的源文件并不重要/产生相同的结果(当cpp完成文件读取和(预(处理-imacros时的值是多少。

最新更新