cmake構建qt工程

2021-07-05 18:22:11 字數 3219 閱讀 2634

如何選擇?

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 += qt

qt -= 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 = example

sources += main.cpp mainwindow.cpp

headers += mainwindow.h

forms += mainwindow.ui

headers 中的檔案是否需要 moc 進行預處理,qmake 執行時會根據其是否含有q_object自動判斷。

這也是為什麼 很多人新增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)

add_executable(example win32 main.cpp mainwindow.cpp $)

前者啟用 qtmain.lib 庫來提供windows下的 winmain 入口函式。後者鏈結 windows 子系統

前面已經用到了qt的 moc 和 uic,這次增加了資源系統 需要用 rcc

rcc main.qrc -o qrc_main.cpp
同時,使用了windows下的資源檔案 .rc (比如給程式新增圖示)

target = example

template = 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...