CMake编译Qt程序

此页由Linux Wiki用户Chenxing于2012年3月31日 (星期六) 17:42的最后更改。

出自Linux Wiki

提示:此文已超过 12 年(4398 天)未更新,如发现内容过时或有误,欢迎改进:)

CMake的跨平台和库自动搜寻特性使其成为Linux环境中开发程序的不错选择。即便使用Qt时,如果同时依赖其它库,CMake也会显得比QMake更为灵活。

编写Qt程序的CMakeLists.txt的流程与qmake的pro文件大体相似,主要把cpp文件、头文件、ui文件和资源文件列出即可。

下面给出一例,说明包含在注释中:

project(qtTst)
cmake_minimum_required(VERSION 2.6)
 
find_package(Qt4 REQUIRED)
 
# 包含文件夹:${CMAKE_CURRENT_BINARY_DIR}和${CMAKE_CURRENT_SOURCE_DIR}用于确保moc产生的文件能正确编译。
include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
 
set(qtTst_SOURCES main.cpp mywindow.cpp)
 
# 对于含有Q_OBJECT一类宏的代码(主要是头文件),需要列出以备交给moc处理
set(qtTst_HDRS myexample.h mywindow.h)
 
# UI文件
set(qtTst_UI mywindow.ui)
 
# 资源文件,如果有的话
set(qtTst_RESOURCES images.qrc)
 
# qt4_automoc有时不能正常工作,建议使用下面的qt4_wrap_cpp
# qt4_automoc(${CPP_SOURCES})
 
# 注意虽然这个命令叫wrap cpp,但实际一般处理的是含有Q_OBJECT代码的头文件
qt4_wrap_cpp(qtTst_MOC ${QOBJ_HDRS})
 
# .ui文件需要由uic处理
qt4_wrap_ui(qtTst_UIC ${qtTst_UI})
 
qt4_add_resources(qtTst_RCC ${qtTst_RESOURCES})
 
add_executable(myapp ${qtTst_SOURCES} ${qtTst_UIC} ${qtTst_MOC} ${qtTst_UIC} ${qtTst_RCC})
 
# 指明链接QtCore和QtGUI
target_link_libraries(myapp ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
 
# 或者使用下面更灵活的方法:
# INCLUDE(${QT_USE_FILE})
# ADD_DEFINITIONS(${QT_DEFINITIONS})
# 设置用到的可选Qt库:
# SET(QT_USE_QTOPENGL TRUE)
# target_link_libraries(myapp ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})

更多信息,可以参考[1]和Qt Developer Network文章[2]

对于一些特殊的情况,如在.cpp文件中使用Q_OBJECT宏等,可以参考这篇中文文章[3]

相关资料

  1. CMake文档
  2. Using CMake to Build Qt Projects
  3. Qt4的xxx.cpp文件内包含Q_OBJECT时CMakeLists.txt的编写

本文对您有帮助?分享给更多朋友!

反馈与讨论

发现文档不全面、有错误却没时间编辑文档?想分享自己的经验或见解?欢迎在此留言、讨论。
个人工具
简体繁体转换