使用CMake構建Qt5工程

2021-08-28 04:14:35 字數 2748 閱讀 6396

如何使用cmake構建qt工程,cmake和qt各自的幫助文件上均提供了一些方法,下面對這些方法進行簡單描述:

qt使用一系列繫結工具輔助生成**。如:moc(meta-object compiler)用於元物件**生成,適用於*.h,*.cpp檔案,uic(user inte***ce compiler)用於widget布局生成,適用於*.ui檔案,rcc(resource compiler)用於虛擬檔案系統內容生成, 適用於*.qrc檔案。當使用qt官方ide(qt creator)構建專案時,ide會自動呼叫這些工具。

當使用cmake生成qt工程時,所需做的事情就是告訴cmake哪些檔案需要用使用qt 輔助工具進行生成。

注意:以下 使用 cmake 3.11, qt 5.9測試。更低版本沒有測試過,可能存在問題!!!

cmake_minimum_required(version 2.8.11 fatal_error)

set(project_name testwindow)

project($)

#開啟全域性moc

set(cmake_automoc on)

#開啟全域性uic

set(cmake_autouic on)

#開啟全域性rcc,本示例中沒有使用qrc,此句可以去掉

set(cmake_autorcc on)

find_package(qt5 required widgets)

set(target_name mainwindow)

add_executable($ main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

target_link_libraries($ qt5::widgets)

該方法 從cmake全域性入手控制檔案生成,最多隻需三句話。非常簡便!

cmake_minimum_required(version 2.8.11 fatal_error)

set(project_name testwindow)

project($)

find_package(qt5 required widgets)

set(target_name mainwindow)

add_executable($ main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

target_link_libraries($ qt5::widgets)

#設定目標關聯的*.h, *.cpp 使用 qt moc進行編譯 

set_target_properties($ properties automoc on)

#設定目標關聯的*.ui 使用 qt uic進行編譯

set_target_properties($ properties autouic on)

#跳過不需要使用moc編譯的檔案。如果覺得麻煩此句可以不寫,automoc能根據*.h,*.cpp**裡面的巨集(q_object;q_gadget;q_namespace)自動判斷是否需要使用moc

set_source_files_properties(main.cpp properties skip_automoc on)

使用該方法,從目標(可執行或者庫)入手控制檔案生成,可控力度更細一些。

上述兩種方法:

使用cmake官方auto方法生成的vs工程,主要會修改三個地方:

1)會將乙個mocs_compilation.cpp新增到工程裡面

2)【附件包含路徑】中會新增一句testwindow_autogen\include_***

3)【預先生成事件】中會新增預處理命令,原始檔修改後會自動重新生成moc_***.cpp檔案

cmake_minimum_required(version 2.8.11 fatal_error)

set(project_name testwindow)

project($)

set(target_name mainwindow)

find_package(qt5 required widgets)

#包含當前路徑,使用*.ui檔案時,需要加上這句,否則找不到標頭檔案

set(cmake_include_current_dir on)

#需要生成的moc檔案,輸出檔名稱放在變數 mocfiles中,必須在find qt5 package才能呼叫

qt5_wrap_cpp(mocfiles mainwindow.h)

source_group("moc" files $)

#需要生成的ui檔案,必須在find qt5 package才能呼叫

qt5_wrap_ui(uifiles mainwindow.ui)

#新增生成的moc檔案到目標中

add_executable($ main.cpp mainwindow.cpp mainwindow.h mainwindow.ui $)

target_link_libraries($ qt5::widgets)

該方法從 原始檔 入手控制檔案生成,要稍微麻煩一些。

cmake生成vs工程後,將mainwindow.ui的預處理命令放在mainwindow.ui屬性配置中,而mainwindow.h的預處理命令放在cmake rules/moc_mainwindow.cpp.rule的屬性配置中。原始檔修改後,目標檔案會自動生成。

cmake構建qt工程

如何選擇?using cmake to build qt projects 一文中說 儘管如此,如果簡單qt的工程都不知道怎麼用 cmake 構建,複雜的工程,就更不知道如何使用 cmake 了。還是從簡單的學起吧 include include qdebug int main int argc,c...

如何使用CMake構建工程

本文舉乙個簡單的使用cmake構建c 工程的例子。通過這個例子來看下如何使用cmake構建乙個c 工程。cmakelists.txt 總cmake aaa dir 動態庫目錄 cmakelists.txt 動態庫aaa的cmake include dir 庫aaa對外的頭檔案目錄 aaa.h 庫aa...

CMake構建工程

目標 使用cmake構建多級的目錄的c 專案,包含動態庫的引用。檔案結構 cmakelists.txt 1 build lib 這裡存放動態庫 cmakelists.txt 2 lib bye cmakelists.txt 3 bye.cc 4 lib hello cmakelists.txt 5 ...