Kla*_*aim 19 c++ qt cmake c++11 qt5
我将项目代码从Qt4升级到Qt5.它使用CMake.除了与Qt相关的一行Cmake命令外,转换得很好.我在目前的文档中找不到像
如何从CMake(与Qt5)链接QtMain?
这是转换我的项目的唯一缺失位.有人能指点我解释这个或解释如何用Qt5做这个吗?我的Qt4代码工作正常,但我找不到Qt5的Cmake宏.
编辑>这是我目前的CMake文件:https://bitbucket.org/klaim/aos_qt5/src/593c195c4c6889f6968d68fca018ef425783a063/tools/aosdesigner/CMakeLists.txt? at =wip_qt5
所有qt5必需的CMake宏已经设置正确我相信,唯一不起作用的是连接到QtMain什么都不做,正如预期的那样,因为应该有一个Qt5特定的方式来做它我找不到的Qt5文档.
您可以浏览文件历史记录以查看它如何与Qt4一起使用.
Fra*_*ser 14
从您链接的Qt文档中,您似乎可以找到Qt5Core而不是Qt5Widgets.这将创建一个名为的导入目标Qt5::WinMain.来自Qt文档:
为每个Qt模块创建导入的目标.这意味着它
Qt5<Module>_LIBRARIES包含导入目标的名称,而不是库的路径.
...
Qt 5中的每个模块都有一个带有命名约定的库目标Qt5::<Module>
find_package( Qt5Widgets REQUIRED )
find_package( Qt5Core REQUIRED )
...
add_executable( aosdesigner WIN32 ${AOSDESIGNER_ALL_FILES} )
target_link_libraries( aosdesigner
${Boost_LIBRARIES}
utilcpp
aoslcpp
Qt5::WinMain # <-- New target available via find_package ( Qt5Core )
)
qt5_use_modules( aosdesigner Widgets )Run Code Online (Sandbox Code Playgroud)
我还建议您删除两个link_libraries调用,因为它是一个已弃用的命令,我指定CMake版本2.8.9而不是仅仅2.8作为CMakeLists.txt顶部所需的最小值,因为这是必需的qt5_use_modules.
从CMake 2.8.11和Qt 5.1开始,如果在add_executable调用中指定WIN32,或者以其他方式设置WIN32_EXECUTABLE目标属性,则链接到Qt5 :: WinMain是自动/隐式的.
演讲在
https://devdays.kdab.com/wp-content/uploads/2012/cmake.pdf
视频在
http://www.youtube.com/watch?feature=player_detailpage&v=GJ0kMsLbk6Q#t=751
描述了进入CMake 2.8.11的功能.
有关Qt的CMake的更多信息,请参阅
http://www.kdab.com/modern-cmake-with-qt-and-boost/
编辑:感谢Archi评论(见下文),只需添加
target_link_libraries(<your_app> Qt5::WinMain)
Run Code Online (Sandbox Code Playgroud)
要么
target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)
在您的应用程序的CMakeLists.txt中.两种语法都适合我.