使用IAR工具链进行CMake构建

CMake是一款强大的开源跨平台软件构建系统,支持多种目标构建系统,广泛应用于嵌入式软件开发。

本文主要介绍如何使用IAR工具链进行CMake构建。

准备工作

  • 下载,安装和激活IAR工具链
  • 下载,安装CMake

使用IAR工具链进行CMake构建
使用IAR工具链进行CMake构建主要需要配置两个文件

  • CMakeLists.txt 文件
  • CMake工具链文件:包含对应工具链的信息,通常为.cmake文件

下面是IAR EWARM v9.70.4对应的CMake工具链文件 (对应ninja.exe位于安装目录common/bin下面):

set(CMAKE_ASM_COMPILER "C:/iar/ewarm-9.70.4/arm/bin/iasmarm.exe")
set(CMAKE_C_COMPILER "C:/iar/ewarm-9.70.4/arm/bin/iccarm.exe")
set(CMAKE_CXX_COMPILER "C:/iar/ewarm-9.70.4/arm/bin/iccarm.exe")

if(CMAKE_GENERATOR MATCHES "^Ninja.*$")
  find_program(CMAKE_MAKE_PROGRAM
    NAMES ninja.exe
    PATHS $ENV{PATH}
        "C:/iar/ewarm-9.70.4/common/bin"
    REQUIRED)
endif()

下面主要介绍IAR工具链的CMakeLists.txt文件 (注意:CMakeLists.txt 文件本身功能非常强大,这里只介绍跟IAR工具链相关的部分)。

设置使能IAR编译器语言扩展(对应编译器选项-e):

set(CMAKE_C_EXTENSIONS ON) 
set(CMAKE_CXX_EXTENSIONS ON)

设置IAR编译器和汇编器选项

target_compile_options(BareMetal PRIVATE
  $<$<COMPILE_LANGUAGE:C>: 
   --cpu=Cortex-M4
   --fpu=VFPv4_sp
   --dlib_config=normal 
   --require_prototypes
   -Ol
  >
  $<$<COMPILE_LANGUAGE:ASM>:
   --cpu Cortex-M4
   --fpu VFPv4_sp
   -s+
   -M[]
   -w+
  >)

设置IAR链接器选项 (注意:如果有重复的参数,需要使用SHELL:)

target_link_options(BareMetal PRIVATE
  --map .
  --config ../stm32f405xG.icf
  --semihosting
  --entry Reset_Handler
  --place_holder __checksum,4,.checksum,4
#CMake requires the SHELL: prefix for repeated parameters
  SHELL:--define_symbol=__checksum_begin=0x8000000 
  SHELL:--define_symbol=__checksum_end=0x800FFFB
  --redirect __iar_sh_stdout=__iar_sh_stdout_swo
  --vfe
  --text_out locale
  --cpu=Cortex-M4
  --fpu=VFPv4_sp)

使用ielftool生成checksum:

add_custom_command(TARGET BareMetal
  POST_BUILD 
  COMMAND ${CMAKE_IAR_ELFTOOL} 
  --verbose
  --fill="0xFF\;0x8000000-0x800FFFB"
  --checksum="__checksum:4,crc32:Li,0xFFFFFFFF\;0x8000000-0x800FFFB"
  $<TARGET_FILE:BareMetal> 
  $<TARGET_FILE:BareMetal>)

使用ielftool生成hex文件:

add_custom_command(TARGET BareMetal
  POST_BUILD 
  COMMAND ${CMAKE_IAR_ELFTOOL} 
  --ihex
  --verbose
  $<TARGET_FILE:BareMetal> 
  $<TARGET_FILE_DIR:BareMetal>/BareMetal.hex)

使用ielftool生成bin文件:

add_custom_command(TARGET BareMetal
  POST_BUILD 
  COMMAND ${CMAKE_IAR_ELFTOOL} 
  --bin
  --verbose
  $<TARGET_FILE:BareMetal> 
  $<TARGET_FILE_DIR:BareMetal>/BareMetal.bin)

在命令行中输入cmake -G "Ninja Multi-Config" -B build --toolchain ewarm.cmake命令生成对应的Ninja构建

china-learn-CMake-with-IAR-toolchain-1

在命令行中输入cmake --build build --config Debug命令进行Debug构建:

china-learn-CMake-with-IAR-toolchain-2

在EWARM中新建工程调试对应CMake构建的elf文件,选择工程类型为Externally built executable:

china-learn-CMake-with-IAR-toolchain-3

按照readme_external_binary.txt里面的步骤配置对应的调试工程:

  • 添加对应的elf文件
  • 配置对应的芯片(Options > General Options > Target > Device)
  • 配置对应的调试器选项(Options > Debugger > Setup > Driver)

然后就可以进行下载调试了:

china-learn-CMake-with-IAR-toolchain-4

另外IAR EWARM v9.60.2开始支持导入CMakeLists.txt 文件,基于CMake进行构建。

在EWARM中新建CMake工程,选择工程类型为Import CMakeLists.txt:

china-learn-CMake-with-IAR-toolchain-5

选择对应的CMakeLists.txt文件之后,CMake/CMSIS-Toobox窗口会输出生成的CMake构建信息:

china-learn-CMake-with-IAR-toolchain-6

右击工程,选择Make进行构建,对应Build窗口会输出对应CMake构建信息:

china-learn-CMake-with-IAR-toolchain-7

配置调试选项:

  • 配置对应的芯片(Options > General Options > Target > Device)

  • 配置对应的调试器选项(Options > Debugger > Setup > Driver)

然后就可以进行下载调试了:

china-learn-CMake-with-IAR-toolchain-8

注意事项
IAR IDE中构建linker会按照模块名字的字母顺序进行链接,而CMake中构建linker会按照target_sources()中指定的模块顺序进行链接,如果想让IAR IDE工程和CMake工程的输出一致,需要配置CMake的target_sources()按照模块名字的字母顺序进行排列,这样IAR IDE工程和CMake工程链接的时候都会按照模块名字的字母顺序进行链接,从而保证输出一致。

总结
本文主要以IAR EWARM v9.70.4为例介绍如何使用IAR工具链进行CMake构建,对应方法同样适用于IAR Build Tools,更多信息可以参考https://github.com/iarsystems/cmake-tutorial 或者联系IAR中国。

参考文献:

https://cmake.org/
https://github.com/iarsystems/cmake-tutorial

posted @ 2026-07-23 13:43  IAR爱亚系统  阅读(2)  评论(0)    收藏  举报