如果在 CMakeLists.txt 中添加定义,Qt5 CMake 找不到 C++ STD 库
Qt5 CMake can't find C++ STD library if a definition is added in CMakeLists.txt
这是我正在努力解决的问题。
我正在使用 CMake 构建我的 Qt5 GUI 项目。我正在使用来自 GitHub 的自定义模块 QML-material project。
问题是,正如项目文档中所说 - 为了为您的项目设置模块,您应该添加一个定义:
add_definitions("-DQPM_INIT\(E\)=E.addImportPath\(QStringLiteral\(\"qrc:/\"\)\)\;")
但如果在 CMakeLists.txt 中添加此定义,则项目无法找到 C++ STD 库。如果我把它注释掉,STD 功能可以再次使用。
关于定义含义。
这个宏基本上调用 addImportPath("qec:/") 到调用它的参数。在我的例子中,它在 main():
// Working example
QQmlApplicationEngine engine;
QPM_INIT(engine);
但如果我只是更改它并直接调用 addImportPath 并删除定义,它就找不到自定义 QML 模块。
// Not working example
QQmlApplicationEngine engine;
engine.addImportPath(QStringLiteral("qrc:/"));
我的问题:
- 为什么CMake中的定义会阻止项目与STD lib的链接?
- 为什么如果我用它在 main() 函数中的表示替换宏它不起作用?
- 有人建议如何同时使用自定义模块和 STD 库吗?
注意! Qt 库仍然可见。问题仅在于 STD。
大多数编译器不允许使用类似函数的定义。使用 add_definition 添加这样的宏是一种解决方法,因为它将宏添加到 CXX_FLAGS,而不是 CXX_DEFINES,但显然它也不能正常工作。
这是我正在努力解决的问题。
我正在使用 CMake 构建我的 Qt5 GUI 项目。我正在使用来自 GitHub 的自定义模块 QML-material project。 问题是,正如项目文档中所说 - 为了为您的项目设置模块,您应该添加一个定义:
add_definitions("-DQPM_INIT\(E\)=E.addImportPath\(QStringLiteral\(\"qrc:/\"\)\)\;")
但如果在 CMakeLists.txt 中添加此定义,则项目无法找到 C++ STD 库。如果我把它注释掉,STD 功能可以再次使用。
关于定义含义。
这个宏基本上调用 addImportPath("qec:/") 到调用它的参数。在我的例子中,它在 main():
// Working example
QQmlApplicationEngine engine;
QPM_INIT(engine);
但如果我只是更改它并直接调用 addImportPath 并删除定义,它就找不到自定义 QML 模块。
// Not working example
QQmlApplicationEngine engine;
engine.addImportPath(QStringLiteral("qrc:/"));
我的问题:
- 为什么CMake中的定义会阻止项目与STD lib的链接?
- 为什么如果我用它在 main() 函数中的表示替换宏它不起作用?
- 有人建议如何同时使用自定义模块和 STD 库吗?
注意! Qt 库仍然可见。问题仅在于 STD。
大多数编译器不允许使用类似函数的定义。使用 add_definition 添加这样的宏是一种解决方法,因为它将宏添加到 CXX_FLAGS,而不是 CXX_DEFINES,但显然它也不能正常工作。