gcc make是否有可能测试其中一个源文件中是否存在定义,即
ifeq(DEFINED_BLAH_BLAH,3) @echo等于3 其他 @echo不等于3 ENDIF
答案 0 :(得分:0)
我已经看过这个并且根据评论的建议,你可以做以下事情。不优雅,可能不是最好的解决方案,但它有效:
echo -ne "#if 1==MYVAL\n0\n#else\n1\n#endif\n" | cpp -P -imacros test.h
或通过gcc
或g++
:
echo -ne "#if 1==MYVAL\n0\n#else\n1\n#endif\n" | \
gcc -Xpreprocessor -P -E -imacros test.h -
这些将返回shell样式0
(对于MYVAL
中定义的test.h
为1
}或1
stdout
可以在make
/ shell中进行测试。
您可能还想删除所有附加| grep -v '^$'
的空行。
详细说明上述内容。我创建(echo)作为简单文件,我通过预处理器运行,检查给定宏的相等性,并导致0
或1
在输出中。 -P
cpp
,因为它不是真正的C文件,我们不需要输出中的任何额外位。 -imacros
表示保留该文件中定义的宏,但丢弃通过处理它生成的任何输出。
还应该注意,如果您需要任何条件定义来考虑传递给编译器的任何定义,您还需要将它们传递给此cpp
运行。
另请注意,test.h
是否是您知道应包含宏定义的头文件。或者main.c
是一个包含那个(和其他)标题的源文件并不重要/产生相同的结果(当cpp
完成文件读取和(预)处理时的值是什么-imacros
。