我无法将 QQmlEngine 包含到 cmake 项目中。
这是我的 C++:
#include <QtQml/QQmlEngine>
...
QObject *someQObject;
QQmlEngine::setObjectOwnership(someQObject, QQmlEngine::ObjectOwnership::CppOwnership);
以及 cmake 部分:
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5Quick REQUIRED)
...
add_executable(name ${src})
qt5_use_modules(name Core Gui Qml Quick )
编译失败:
CMakeFiles/....cpp.o: In function `...':
....cpp:57: undefined reference to `QQmlEngine::setObjectOwnership(QObject*, QQmlEngine::ObjectOwnership)'
clang-3.8: error: linker command failed with exit code 1 (use -v to see invocation)
我错过了什么?
编辑,@qCring(抱歉,无法评论您的回答):
好吧,当我省略“setObjectOwnership”调用时,一切正常。 Qt 应用程序的其余部分工作正常。因此它实际上以某种方式链接。
当我添加你的行时,我得到了
"The plain signature for target_link_libraries has already been used with the target "name". All uses of target_link_libraries with a target must be either all-keyword or all-plain."
编辑:
我的问题以某种方式消失了。我在 x86_64 上运行 arch linux。
最佳答案
您实际上并没有链接到 Qt 库,因此出现 undefined symbol 错误。 find_package
和 qt5_use_modules
这两个宏都只提供来自某些包/模块的 CMake 变量。您必须像这样链接库:
target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml)
关于c++ - QQmlEngine 和 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39808193/