gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:50:10 25 4
gpt4 key购买 nike

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

ifeq (DEFINED_BLAH_BLAH,3)@echo 等于 3别的@echo 不等于 3结束

最佳答案

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

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(对于 test.h 中定义的 MYVAL 为真并且为 1)或 stdout 上的 1,您可以在 make/shell 中对其进行测试。

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

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

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

还要注意您是否知道 test.h 作为您的头文件应该包含宏定义。或者 main.c 作为包含该(和其他) header 的源文件并不重要/产生相同的结果(无论 cpp 完成时的值是什么为 -imacros 读取和(预处理)文件。

关于testing - 如果源文件中存在已定义的符号,gcc 可以进行测试吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50196811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com