如果源文件中存在已定义的符号,gcc可以进行测试

时间:2018-05-06 06:22:02

标签: testing makefile

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

ifeq(DEFINED_BLAH_BLAH,3) @echo等于3 其他 @echo不等于3 ENDIF

1 个答案:

答案 0 :(得分:0)

我已经看过这个并且根据评论的建议,你可以做以下事情。不优雅,可能不是最好的解决方案,但它有效:

echo -ne "#if 1==MYVAL\n0\n#else\n1\n#endif\n" | cpp -P -imacros test.h

或通过gccg++

进行调用
echo -ne "#if 1==MYVAL\n0\n#else\n1\n#endif\n" | \
gcc -Xpreprocessor -P -E -imacros test.h -

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

您可能还想删除所有附加| grep -v '^$'的空行。

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

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

另请注意,test.h是否是您知道应包含宏定义的头文件。或者main.c是一个包含那个(和其他)标题的源文件并不重要/产生相同的结果(当cpp完成文件读取和(预)处理时的值是什么-imacros