CMake編譯Qt程序

此頁由 Linux Wiki使用者Chenxing 於 2012年3月31日 (星期六) 17:42 的最後更改。

出自Linux Wiki

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

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的編寫

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

反馈与讨论

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