🛰️请耐心等待,正在努力加载站点资源🚀

boxmoe_header_banner_img

加载中

CLion的cmake环境搭配


avatar
jie 2026年4月19日 2026年5月8日 207

CLion的cmake环境搭配

1. 使用步骤(只搭配环境,不进行实际的使用)

1.1 第一步 STM32CubeMX生成cmake文件

1.2 第二步 右键使用clion打开文件

1.3 第三步 使用debug-debug预设

1.4 第四步 安装Arm GCC 和OpenOCD(注意解压后不要修改文件位置,不然会导致环境紊乱)

DevEnv.zip

xpack-openocd-0.12.0-7-win32-x64.zip

1.5 第五步 OpenOCD添加至环境变量

双击Path可以打开新建路径

1.6 第六步 将clion改为中文

2. clion的嵌入式开发配置

2.1 第一步 设置->构建,执行·部署->嵌入式开发

点击…选中stm32CLI

2.2 第二步 编译链的改变

2.2.1 选择编辑cmake文件

2.2.2 选择编译链

2.2.3 添加编译链

2.2.3.1 cmake的选择(选择STM32CubeCLT的cmake.exe)

2.2.3.2 Ninja.exe的选择(选择STM32CubeCLT的Ninja.exe)

2.2.3.3 C编译器的选择(选择STM32CubeCLT的arm-none-eabi-gcc.exe)

2.2.3.4 C++编译器的选择(选择STM32CubeCLT的arm-none-eabi-c++.exe)

2.2.3.5 工具链修改

3. OpenOCD的使用

3.1 选择运行配置

3.2 找到openocd

3.3 页面配置

3.4 选择配置文件(以STM32F205RGT6为例

4. CLion中使用daplink下载,stlink下载,jlink下载

4.1 daplink下载

4.1.1 使用daplink.cfg下载

daplink.cfg

4.1.2 daplink.cfg在不同芯片的修改

芯片flash大小的查看

在STM32cubeMX此页面中查看

先编译再运行 直到右下角出现openocd 已下载固件

4.2 stlink下载

对于新版 OpenOCD 可能不支持hla_swd,transport select swd 改用通用 SWD,不依赖 HLA(两份驱动文件,一份是通用性不依赖 HLA,一份是依赖 HLA)

stlink.cfg

stlink.cfg

4.3 jlink下载

5. CMakelist 文件的修改

5.1.1 添加每一个文件路径

5.1.1.1 方法一 为每一个.C或 .C++文件添加路径(好处是清晰分明)

以我的代码架构作为参考


├── ADC
│ ├── drv_adc.cpp
│ └── drv_adc.h
├── CMakeLists.txt
├── CMakePresets.json
├── Core
│ ├── Inc
│ └── Src
├── Drivers
│ ├── CMSIS
│ └── STM32F4xx_HAL_Driver
├── Middlewares
│ └── Third_Party
├── SEGGER
│ ├── Config
│ └── RTT
├── STM32F405XX_FLASH.ld
├── bsp
│ ├── log
│ └── usart
├── build
│ └── Debug
├── cmake
│ ├── gcc-arm-none-eabi.cmake
│ ├── starm-clang.cmake
│ └── stm32cubemx
├── component
│ ├── comp_ahrs.c
│ ├── comp_ahrs.h
│ ├── comp_cmd.c
│ ├── comp_cmd.h
│ ├── comp_game.h
│ ├── comp_type.h
│ ├── comp_utils.c
│ └── comp_utils.h
├── modules
│ └── dr16
├── one.ioc
├── startup_stm32f405xx.s
├── task
│ └── dr16
└── tool
├── convert
└── process

# Add sources to executable
target_sources(${CMAKE_PROJECT_NAME} PRIVATE

Add user sources here

task/dr16/dr16_task.c bsp/log/bsp_log.c component/comp_utils.c component/comp_cmd.c component/comp_ahrs.c bsp/usart/bsp_uart.c modules/dr16/dev_dr16.c SEGGER/RTT/SEGGER_RTT.c SEGGER/RTT/SEGGER_RTT_printf.c SEGGER/RTT/SEGGER_RTT_ASM_ARMv7M.s tool/convert/convert.c tool/process/process.h ADC/drv_adc.cpp )

Add include paths

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE

Add user defined include paths

task/dr16 SEGGER SEGGER/Config SEGGER/RTT component tool tool/convert tool/process bsp bsp/usart bsp/log modules modules/dr16 ADC )

5.1.1.2 直接添加文件路径(好处是无需为此文件路径下的每一个代码添加.c或.cpp文件)

# Link directories setup
target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE

Add user defined library search paths

)

set(USER_CODE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/task" "${CMAKE_CURRENT_SOURCE_DIR}/component" "${CMAKE_CURRENT_SOURCE_DIR}/bsp" "${CMAKE_CURRENT_SOURCE_DIR}/modules" "${CMAKE_CURRENT_SOURCE_DIR}/tool" "${CMAKE_CURRENT_SOURCE_DIR}/SEGGER" "${CMAKE_CURRENT_SOURCE_DIR}/ADC" )

set(USER_SOURCES) set(USER_HEADERS)

foreach(USER_CODE_DIR IN LISTS USER_CODE_DIRS) file(GLOB_RECURSE USER_DIR_SOURCES CONFIGURE_DEPENDS "${USER_CODE_DIR}/.c" "${USER_CODE_DIR}/.cpp" "${USER_CODE_DIR}/.s" "${USER_CODE_DIR}/.S" )

file(GLOB_RECURSE USER_DIR_HEADERS CONFIGURE_DEPENDS "${USER_CODE_DIR}/.h" "${USER_CODE_DIR}/.hpp" )

list(APPEND USER_SOURCES ${USER_DIR_SOURCES}) list(APPEND USER_HEADERS ${USER_DIR_HEADERS}) endforeach()

list(REMOVE_DUPLICATES USER_SOURCES) list(REMOVE_DUPLICATES USER_HEADERS)

set(USER_INCLUDE_DIRS ${USER_CODE_DIRS}) foreach(USER_HEADER IN LISTS USER_HEADERS) get_filename_component(USER_HEADER_DIR "${USER_HEADER}" DIRECTORY) list(APPEND USER_INCLUDE_DIRS "${USER_HEADER_DIR}") endforeach() list(REMOVE_DUPLICATES USER_INCLUDE_DIRS)

Add sources to executable. Headers are included for IDE visibility.

target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${USER_SOURCES} ${USER_HEADERS} )

Add include paths

target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${USER_INCLUDE_DIRS} )

5.1.2 添加printf的float支持

# Remove wrong libob.a library dependency when using cpp files
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_LIBRARIES ob)

Add linked libraries

target_link_libraries(${CMAKE_PROJECT_NAME} stm32cubemx

Add user defined libraries

)

target_link_options(${CMAKE_PROJECT_NAME} PRIVATE

Add user defined link options here

LINKER:-u,_printf_float )

5.1.3 添加C++支持(如果代码使用了C++)

# Setup compiler settings
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)

# Enable CMake support for ASM, C and C++ languages
enable_language(C CXX ASM)

上一次更新已经跑远了✨ 计算中...
(‾◡◝) 本内容里的一些消息,可能已经跟不上时间啦~


评论(1)

查看评论列表
评论头像
一位 WordPress 评论者 2026年04月19日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 <a href="https://cn.gravatar.com/">Gravatar</a>。

发表评论

表情 颜文字
插入代码
杰的小站

最新评论

后退
前进
刷新
复制
粘贴
全选
删除
返回首页
0%
目录
顶部
底部
📖 文章导读