CMake 作為建置系統
簡介
從 TouchGFX V4.25.0 和 STM32CubeMX V6.14.0 開始,CMake 建置系統是 TouchGFX 專案支援的一項工具鏈。 此情境將向您展示如何使用 CMake 作為建置系統,進行 TouchGFX 專案的設定、建置和偵錯。
如欲深入瞭解 CMake,請參閱官方 CMake 文件。
先決條件
建議下載 STM32Cube 指令列工具集 (STM32CubeCLT)。 其中包括針對 STM32CubeMX 產生的 CMake 專案進行設定、建置和偵錯所需的所有工具 (編譯器、偵錯器、CMake、Ninja 等)。
Note
在 STM32CubeMX 中變更工具鏈
首先,將 STM32CubeMX 中「專案管理器」分頁中的工具鏈變更為 CMake。 然後,產生程式碼。
在 TouchGFX Designer 中產生程式碼
按下按鈕或鍵盤上的 F4 鍵從 TouchGFX Designer 產生程式碼,以將 TouchGFX 特定程式碼新增至專案。
專案結構
在 STM32CubeMX 和 TouchGFX Designer 中產生程式碼後,將會建立類似下面的檔案結構:
├───<project-name>.ioc
├───CMakeLists.txt # 根 CMake 列表
├───CMakePresets.json # 預定義的 CMake 配置
├───<mcu-part-number>.ld # 產生連結器指令碼,例如 STM32U5g9xx_FLASH.ld
├───cmake
| ├───gcc-arm-none-eabi.cmake # CMake 工具鏈檔案
│ ├───stm32cubemx
│ │ └───CMakeLists.txt # STM32CubeMX CMake 列表
│ └───touchgfx
│ └───CMakeLists.txt # TouchGFX CMake 列表
├───Core
├───Drivers
├───Middlewares
└───TouchGFX
CMakeLists.txt
專案根目錄中的檔案用於使用者修改,是 CMake 設定的入口點。 CMakePresets.json
檔案定義了專案的各種設定預設集 (例如,偵錯、發布)。
stm32cubemx/CMakeLists.txt
列表檔案管理 STM32CubeMX 產生的檔案,而 touchgfx/CMakeLists.txt
檔案管理 TouchGFX 特定的 GUI 檔案。 因此,在專案新增/刪除 GUI 元素和資產時,在 TouchGFX Designer 中重新產生程式碼很重要,這樣才能反映建置系統的變更。
首次在 TouchGFX Designer 中產生程式碼時,其會嘗試將以下行新增至根目錄 CMakeLists.txt
,以將 TouchGFX 納入建置系統:
CMakeLists.txt
...
# 加入 STM32CubeMX 產生的來源
add_subdirectory(cmake/stm32cubemx)
# 加入 touchgfx 產生的來源和函式庫
add_subdirectory(cmake/touchgfx)
...
TouchGFX CMake 列表檔案需要在 STM32CubeMX CMake 列表之後納入,因為 STM32CubeMX CMake 列表中定義的 MCU 特定 HAL 和驅動程式存在依賴關係。
Caution
更新連結器指令碼
使用 STM32CubeMX 產生程式碼後,STM32CubeMX 會產生一個或多個與 arm GCC 相容的連結器指令碼。 連結器指令碼只會產生一次,可以手動修改以符合專案要求。
如果專案是以 TouchGFX 開發板設定為基礎,可以使用已經為 STM32CubeIDE 工具鏈定義的連結器指令碼作為參考,更新預設的連結器指令碼。
或者,使用者可以更新產生的 CMake 工具鏈檔案 gcc-arm-none-eabi.cmake
指出連結器要使用另一個連結器指令碼,而不是預設的連結器指令碼。 例如,若要使用已定義的 STM32CubeIDE 連結器指令碼:
gcc-arm-none-eabi.cmake
...
set(CMAKE_C_LINK_FLAGS "${TARGET_FLAGS}")
set(CMAKE_C_LINK_FLAGS "${CMAKE_C_LINK_FLAGS} -T \"${CMAKE_SOURCE_DIR}/STM32CubeIDE/STM32U5G9ZJTXQ_FLASH.ld\"")
...
建置專案
產生程式碼並確保 TouchGFX 作為建置系統的一部分包含在內後,可以使用 STM32 VS Code Extension 進行專案建置和偵錯。 STM32 VS Code Extension 是一套實用的工具,開發人員可利用來建置 CMake 專案並使用 STM32CubeCLT 針對目標進行偵錯。
首先,必須使用 STM32 VS Code Extension 匯入專案,方法是選擇 Import CMake project
並選擇專案的根目錄作為專案位置:
此擴充功能將偵測專案中使用的 MCU 和工具鏈。 各種 VSCode 任務和啟動設定由 VSCode 元資料資料夾 .vscode/
中的擴充功能產生。 可用於進行專案建置、清理、燒錄和偵錯。 或者,可以透過 CMake VS Code 擴充功能或指令列,直接使用 CMake 設定和建置專案。