CMake作为编译系统
简介
自TouchGFX V4.25.0和STM32CubeMX V6.14.0起,CMake编译系统已成为TouchGFX项目支持的工具链。 此应用场景将演示如何使用CMake编译系统配置、构建和调试TouchGFX项目。
欲进一步了解CMake,请参见官方CMake文档。
先决条件
建议下载STM32Cube命令行工具集 (STM32CubeCLT)。 该工具集包含配置、构建和调试STM32CubeMX生成的CMake项目所需的所有工具(编译器、调试器、CMake、Ninja等)。
Note
在STM32CubeMX中切换工具链
首先,在STM32CubeMX的“Project Manager”选项卡中将工具链更改为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 专用图形用户界面文件。 因此,在项目中添加/删除图形用户界面元素和资源时,必须重新在TouchGFX Designer中生成代码,以确保编译系统同步更新。
首次通过TouchGFX Designer生成代码时,系统将自动在根目录CMakeLists.txt
中添加以下内容,将TouchGFX纳入编译系统:
CMakeLists.txt
...
#添加STM32CubeMX生成的源文件
add_subdirectory(cmake/stm32cubemx)
#添加touchgfx生成的源文件和库
add_subdirectory(cmake/touchgfx)
...
必须确保TouchGFX的CMake列表文件在STM32CubeMX之后引入,因为前者依赖后者定义的MCU专用HAL和驱动配置。
Caution
更新链接器脚本
使用STM32CubeMX生成代码后,STM32CubeMX会生成一个或多个兼容arm GCC的链接器脚本。 这些链接器脚本仅生成一次,用户可手动修改以满足项目需求。
如果项目基于TouchGFX Board Setup创建,可参考已为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扩展来构建和调试项目。 STM32 VS Code扩展是一款实用工具,支持开发者构建CMake项目,并通过STM32CubeCLT在目标硬件上进行调试。
首先,在STM32 VS Code扩展中选择Import CMake project
并指定项目根目录作为项目位置:
该扩展将自动检测项目中使用的MCU和工具链。 并在.vscode/
元数据文件夹中生成各种VSCode任务和启动配置。 使用生成的配置进行构建、清理、烧录和调试。 此外,还可直接使用CMake VS Code扩展或命令行配置和构建项目。