我正在尝试将应用程序交叉编译到另一个系统。我创建了所有依赖项并开始编译。这然后停止与我的依赖库之一,即 Qt3,导致编译器错误:
Error: expected class-name before "{" token
和
Error: "QMutex" does not name a type
我怀疑 Q_EXPORT
符号定义错误,因为我忘记模拟某些环境设置。但是因为它的定义依赖于符号又依赖于符号又依赖于符号等等,所以很难检查。
只是在测试程序中输出它也不起作用,因为 Q_EXPORT
的值并不总是可以转换为字符串。
我的问题是: 我如何使用 GNU 编译器检查预处理器符号的值(在编译/预处理时)。
我以为会有一个选项,但我在网上搜索时没有找到任何东西。
最佳答案
宏符号的调试可能很棘手,因为它发生在实际编译之前 [1]。以打印实际编译命令的方式运行构建系统是一个很好的起点。
然后您可以获取实际的编译命令,并将 -c
替换为 -E
或类似的东西,以检查实际生成的预处理器输出。然后找到您正在编译的源代码中的实际位置 - 期望 -E
的输出非常大 - 一百万行输出并不罕见。使用 #file 和 #line 预处理器符号来跟踪您所在的文件以及所在的行。
[1] 并非在所有编译器中都严格正确,为了帮助准确解决宏导致难以理解代码实际执行的问题,现代编译器在正确解析代码期间扩展宏。然而,这显然对这种特殊情况没有帮助。
关于c++ - 检查预处理器符号的值(#define),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48376758/