腾空腾空,腾空腾空

QQmlEngine and cmake

本文关键字:      更新时间:2023-10-16

我在将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_packageqt5_use_modules只是从某些包/模块提供CMake变量。你必须像这样链接库:

target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml)
相关文章:
  • 没有找到相关文章