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中生成代码
Generate code from TouchGFX Designer by pressing the button or the F4 key on your keyboard, to add the TouchGFX specific code to the project.
项目结构
在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 专用图形用户界面文件。 Therefore, it is important to to re-generate code in TouchGFX Designer when adding/deleting GUI elements and assets to the project to reflect the changes to the build system.
首次通过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扩展或命令行配置和构建项目。


