2016-10-01 76 views
0

我有麻烦,包括QQmlEngine变成了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(对不起,无法评论您的答案):

好吧,当我离开了 “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。

+0

嗯..你能提供一些关于你的系统和你使用的Qt和CMake版本的更多信息吗?另外值得一试:你可以看看[这个CMake项目模板](https://github.com/qCring/QMLApplicationTemplate)来查看当你调用'QQmlEngine :: setObjectOwnership'时是否仍然发生错误。然后我们可以弄清楚它是CMake还是Qt问题。 – qCring

回答

1

你还没有真正链接到Qt库,因此得到未定义的符号错误。宏,find_packageqt5_use_modules只是提供来自某些软件包/模块的CMake变量。你必须链接这样的库:

target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Core PUBLIC Qt5::Gui PUBLIC Qt5::Quick PUBLIC Qt5::Qml)