如何選擇?
using cmake to build qt projects 一文中說:
儘管如此,如果簡單qt的工程都不知道怎麼用 cmake 構建,複雜的工程,就更不知道如何使用 cmake 了。還是從簡單的學起吧
#include /
#include /
qdebug>
int main(int argc, char** argv)
如果不使用構建工具,直接呼叫編譯器來編譯的話,只需要類似這樣的一條命令:
g++ main.cpp -ie:\qt\4.7.0\include -o main -le:\qt\4.7.0\lib -lqtcore4指定頭檔案目錄,以及需要鏈結的庫
qmake 需要乙個 .pro 檔案:
config += qtqt -= gui
sources += main.cpp
啟用qt後,可以通過 qt -= gui 來進一步細調我們需要的模組
cmake 需要乙個 cmakelists.txt 檔案:
project(example)find_package(qt4 required)
set(qt_dont_use_qtgui true)
include($)
add_executable(example main.cpp)
target_link_libraries(example $)
包含乙個cmake為qt提供的配置檔案,$變數是乙個檔名
新增可執行程式目標
鏈結到 qt 的庫
考慮乙個常規qt程式:
如果手動編譯的話:
uic mainwindow.ui -o ui_mainwindow.h
moc mainwindow.h -o moc_mainwindow.cpp
g++ main.cpp mainwindow.cpp moc_mainwindow.cpp -ie:\qt\4.7.0\include -o main -le:\qt\4.7.0\lib -lqtcore4 -lqtgui4使用 qmake 的的話,乙個簡單的 pro 檔案
target = exampleheaders 中的檔案是否需要 moc 進行預處理,qmake 執行時會根據其是否含有q_object自動判斷。sources += main.cpp mainwindow.cpp
headers += mainwindow.h
forms += mainwindow.ui
這也是為什麼 很多人新增q_object巨集後不重新執行qmake會出錯誤的原因。
看看相應的 cmake 的 cmakelists.txt 檔案
project(example)cmake_minimum_required(version 2.6)
find_package(qt4 required)
include($)
include_directories($)
qt4_wrap_cpp(example_mocs mainwindow.h)
qt4_wrap_ui(example_uis mainwindow.ui)
add_executable(example main.cpp mainwindow.cpp $)
target_link_libraries(example $)
需要 uic 的檔案,用 qt4_wrap_ui 處理
因為windows下鏈結時分為 console 和 windows 兩個子系統,所以windows下有些問題需要特殊處理。
用 qmake 時:
用 cmake 是:
set(qt_use_qtmain true)前者啟用 qtmain.lib 庫來提供windows下的 winmain 入口函式。後者鏈結 windows 子系統add_executable(example win32 main.cpp mainwindow.cpp $)
前面已經用到了qt的 moc 和 uic,這次增加了資源系統 需要用 rcc
rcc main.qrc -o qrc_main.cpp同時,使用了windows下的資源檔案 .rc (比如給程式新增圖示)
target = exampletemplate = lib
headers = mainwindow.h widget.h
sources = main.cpp widget.cpp mainwindow.cpp
resources = main.qrc
rc_file = main.rc
project(example)cmake_minimum_required(version 2.6)
find_package(qt4 required)
set(qt_use_qtmain true)
include($)
include_directories($)
if(mingw)
set(cmake_rc_compiler_init windres)
enable_language(rc)
set(cmake_rc_compile_object
"-o coff -i -o ")
endif(mingw)
set(example_srcs main.cpp mainwindow.cpp widget.cpp res/main.rc)
set(example_moc_srcs mainwindow.h widget.h)
qt4_wrap_cpp(example_mocs $)
qt4_add_resources(example_rcc_srcs main.qrc)
set(example_srcs $ $ $)
add_executable(example win32 main.cpp mainwindow.cpp $)
target_link_libraries(example $)
使用 qmake 時,可以在 pro 檔案內分別為兩種模式設定不同的選項。
使用時,可以直接 make release 或 make debug 來編譯不同的版本
使用CMake構建Qt5工程
如何使用cmake構建qt工程,cmake和qt各自的幫助文件上均提供了一些方法,下面對這些方法進行簡單描述 qt使用一系列繫結工具輔助生成 如 moc meta object compiler 用於元物件 生成,適用於 h,cpp檔案,uic user inte ce compiler 用於wid...
CMake構建工程
目標 使用cmake構建多級的目錄的c 專案,包含動態庫的引用。檔案結構 cmakelists.txt 1 build lib 這裡存放動態庫 cmakelists.txt 2 lib bye cmakelists.txt 3 bye.cc 4 lib hello cmakelists.txt 5 ...
用CMake 構建Qt 專案
譯 用cmake構建qt專案 qtsdk中已經包含了qmake用於處理跨平台的編譯問題。然而,還存在其它編譯工具,比如autotools,scons和cmake.這些工具滿足不同的需求,比如外部依賴。當kde專案從使用qt3公升級到使用qt4時,整個專案將構建工具從autotools轉而使用cmak...