1. 程式人生 > 其它 >cmake 指定標頭檔案路徑_使用CMake構建Qul專案

cmake 指定標頭檔案路徑_使用CMake構建Qul專案

技術標籤:cmake 指定標頭檔案路徑cmake 指定編譯器cmake使用

背景知識


qmake是Qt開發者們比較熟悉的工具,作為Qt5中使用的構建系統它存在不少缺陷和限制,因此在Qt for MCUs以及即將釋出的Qt6中,將會使用cmake作為標準的第三方構建系統來構建Qt專案,Qt公司將繼續在qmake上支援使用者,但不會進一步開發它或使用它來構建Qt框架本身。

cmake 是 kitware 公司以及一些開源開發者在開發幾個工具套件(VTK)過程中的衍生品,最終形成體系,成為一個獨立的開放原始碼專案。專案誕生於2001年。cmake的流行其實要歸功於 KDE4 的開發(似乎跟當年的 svn 一樣,KDE 將程式碼倉庫從CVS遷移到SVN,同時證明了SVN管理大型專案的可用性)。

cmake有著諸多優點,開發原始碼/跨平臺/能夠管理大型專案/簡單的工具鏈/高效構建以及可擴充套件性,它的編寫需要熟悉“cmake語言和語法”。

推薦網上搜到一個比較不錯的資料《CMake實踐》,掃碼即可獲取。

9310ea4b9185705ae879c86ca0db3439.png

CMake的編寫


CMake自動生成構建系統,例如makefile和Visual Studio工程檔案。先來看Qt Creator預設生成的MCU工程的CMakeLists.txt檔案:

cmake_minimum_required(VERSION3.15)project(helloworld VERSION 0.0.1 LANGUAGES C CXX ASM)find_package(Qul)

add_executable(helloworld)qul_target_qml_sources(helloworld helloworld.qml)target_link_libraries(helloworld Qul::QuickUltralite)app_target_setup_os(helloworld)app_target_default_main(helloworld helloworld)

CMakeLists.txt,這個檔案是 cmake 的構建定義檔案,檔名是大小寫相關的,如果工程存在多個目錄,需要確保每個要管理的目錄都存在一個CMakeLists.txt。

cmake_minimum_required定義了最小版本號

project(helloworld VERSION 0.0.1 LANGUAGES C CXX ASM)定義工程名稱,並可指定工程支援的語言,支援的語言列表是可以忽略的,預設情況表示支援所有語言。

find_package(Qul)定義了Qt Quick Ultralite(簡稱Qul)附帶的庫和標頭檔案

add_executable(helloworld)定義了這個工程會生成一個檔名為 helloworld 的可執行檔案

qul_target_qml_sources(helloworld helloworld.qml)用來新增qml原始檔,新增C++檔案用法類似:qul_target_generate_interfaces(example example.h)

target_link_libraries(helloworld Qul::QuickUltralite)新增連結庫,此命令自動新增適當的include目錄、編譯定義和庫。

app_target_setup_os(helloworld)使用它可以根據OS變數的值,例如:

set(OS "BareMetal")

set(OS "FreeRTOS")

對OS進行額外的設定。這個命令連結正確的平臺庫並執行其他操作,比如編譯和連結FreeRTOS原始碼。

CMake的執行


CMakeLists.txt所在目錄上執行cmake即可構建專案,例如,為STM32F769I-Discovery板構建:

cmake <source_directory> -DCMAKE_TOOLCHAIN_FILE=<qul_directory>/cmake/toolchain/armgcc.cmake -DQUL_PLATFORM=STM32F769I-DISCOVERY-baremetal

CMAKE_TOOLCHAIN_FILE變數用於切換到armgcc編譯器工具鏈,QUL_PLATFORM變數決定要為哪個特定的板卡構建。

其他參考


還有很多其他命令的用法,具體可參考Qt官方文件:

https://doc.qt.io/QtForMCUs/qtul-cmake-reference.html