腾空腾空,腾空腾空
QQmlEngine and cmake
我在将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(抱歉,不能评论你的答案):
好吧,当我离开"setobjectowership"调用时,一切都很好。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库,因此得到未定义的符号错误。两个宏,find_package
和qt5_use_modules
只是从某些包/模块提供CMake变量。你必须像这样链接库:
target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml)
相关文章:
- 没有找到相关文章