CMake
什么是CMake
CMake是一个开源、跨平台的工具系列,是用来构建、测试和打包软件
CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生成vs项目文件或者makefile
有如下优势:
1.CMake 是一个平台无关的构建系统,可以生成适用于不同平台的原生构建文件,也就是一次编写 CMakeLists.txt,可在多平台上使用
2.CMake 可以生成不同的构建系统配置文件,包括:
- Makefiles(默认)
- Ninja(更快的构建工具)
- Visual Studio 工程文件
- Xcode 工程文件
3.CMake 支持模块化构建,可以把项目拆成多个子模块,并通过 add_subdirectory() 管理,同时支持大量模块和第三方扩展
- 查找系统库(
find_package(OpenGL REQUIRED)
) - 自定义宏(
macro()
/function()
) - 导出/导入目标(
install()
,export()
)
CMake工作流程

对于本人来说,使用到的构建工具一般是ninja和makefile(嵌入式居多)
CMake示例(vscode)
准备工作
将如上下载好然后创建好环境变量即可,如果觉得麻烦可以试试msys2,这里不过多赘述
C语言
创建好main.c和CMakelists.txt
cmake_minimum_required(VERSION 4.0.2)#最低版本
project(my_hello C) #指定工程名和语言
set(CMAKE_C_STANDARD 99)
#include_directories(${PROJECT_SOURCE_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) #设置输出文件路径
message(STATUS "Collected C source files: ${PROJECT_SOURCE_DIR}")#打印输出
aux_source_directory(${PROJECT_SOURCE_DIR} SRC_LIST) #自动(不会递归)在收集所有.c文件,并保存到SRC_LIST变量
message(STATUS "Collected C source files: ${SRC_LIST}")
add_executable(my_hello ${SRC_LIST})#生成一个可执行文件
然后在vscode中选择相应的编译器(这里我之前踩了一个坑:当你修改了路径或者重新装一个新的编译器的时候,需要在红框里面重新扫描,不然出现不了)

然后点击生成即可,生成之后build目录出现makefile,make一下即可
Cubemx+STM32
Cubemx需要准备高版本的,不然不能输出CMake版本
成功后,直接生成就可以运行了

这里vscode由于没有配置json的原因会显示报错,但不用管(报错请关注终端)
如果需要把这个报错去掉的话:
1.找到一个.c或.h文件,点击右下角,选择json

2.点击cmake\stm32cubemx\CMakelists.txt,将下图的编译时的宏定义,复制到c_cpp_properties.json的define中

3.在.vscode\c_cpp_properties.json,添加compilerPath(这里不太规范应该使用arm-gcc)
