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實踐》,掃碼即可獲取。
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