如何在CMake中链接QtMain与Qt5

How to link QtMain in CMake with Qt5?

本文关键字:QtMain Qt5 链接 CMake      更新时间:2023-10-16

我将项目代码从Qt4升级到Qt5。它使用CMake。除了与Qt相关的一行Cmake命令外,转换很顺利。我在当前文档中找不到,比如

  • http://qt - project.org/doc/qt 5.0 -/- qtdoc/cmake manual.html
  • http://qt project.org/doc/qt - 5.0 -/- qtdoc/qtmain.html

如何链接与QtMain从CMake(与Qt5)?

这是唯一缺少的位转换我的项目。谁能给我指出一个医生解释这个或解释如何使用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一起工作的。

从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 )

我还建议您删除您的两个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 target属性,那么链接到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的特性。

有关CMake with Qt的更多信息,请参阅

http://www.kdab.com/modern-cmake-with-qt-and-boost/

编辑:感谢Archi的评论(见下文),只需添加

target_link_libraries(<your_app> Qt5::WinMain)

target_link_libraries(<your_app> ${Qt5Core_QTMAIN_LIBRARIES})

在你的应用程序的CMakeLists.txt。