[cmake] 使用教程

cmake 使用教程

一、demo

代码树

├── HARDWARE
│   ├── EXTI
│   │   └── exti.c
│   ├── INC
│   │   ├── exti.h
│   │   ├── key.h
│   │   └── led.h
│   ├── KEY
│   │   └── key.c
│   └── LED
│       └── led.c
├── Makefile
├── STM32F103RCTx_FLASH.ld
├── SYSTEM
│   ├── delay
│   │   ├── delay.c
│   │   └── delay.h
│   ├── readme.txt
│   ├── rtt
│   │   ├── SEGGER_RTT.c
│   │   ├── SEGGER_RTT.h
│   │   ├── SEGGER_RTT_ASM_ARMv7M.S
│   │   ├── SEGGER_RTT_Conf.h
│   │   └── SEGGER_RTT_printf.c
│   ├── sys
│   │   ├── core_cm3.h
│   │   ├── core_cmFunc.h
│   │   ├── core_cmInstr.h
│   │   ├── stm32f10x.h
│   │   ├── sys.c
│   │   ├── sys.h
│   │   └── system_stm32f10x.h
│   └── usart
│       ├── usart.c
│       └── usart.h
├── USER
│   ├── main.c
│   └── startup_stm32f10x_hd.s
├── build

CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.0)

PROJECT(STM32_REG_TEST1)
SET(TOOLCHAIN_PREFIX arm-none-eabi-)
SET(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)

SET(CMAKE_BUILD_TYPE Debug)
SET(CMAKE_C_FLAGS_DEBUG "-g -gdwarf-2")
ADD_DEFINITIONS(-DSTM32F10X_HD)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mcpu=cortex-m3 -mthumb -specs=nano.specs -Wall -ffunction-sections -fdata-sections")

LINK_LIBRARIES(c m nosys)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--gc-sections -T${CMAKE_CURRENT_SOURCE_DIR}/STM32F103RCTx_FLASH.ld")

INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}/SYSTEM/delay
    ${CMAKE_CURRENT_SOURCE_DIR}/SYSTEM/sys
    ${CMAKE_CURRENT_SOURCE_DIR}/SYSTEM/usart
    ${CMAKE_CURRENT_SOURCE_DIR}/SYSTEM/rtt
    ${CMAKE_CURRENT_SOURCE_DIR}/HARDWARE/INC
)

SET(SRC_LIST USER/main.c)
LIST(APPEND SRC_LIST USER/startup_stm32f10x_hd.s)
LIST(APPEND SRC_LIST SYSTEM/delay/delay.c)
LIST(APPEND SRC_LIST SYSTEM/sys/sys.c)
LIST(APPEND SRC_LIST SYSTEM/usart/usart.c)
LIST(APPEND SRC_LIST SYSTEM/rtt/SEGGER_RTT.c)
LIST(APPEND SRC_LIST SYSTEM/rtt/SEGGER_RTT_printf.c)
LIST(APPEND SRC_LIST HARDWARE/LED/led.c)
LIST(APPEND SRC_LIST HARDWARE/KEY/key.c)
LIST(APPEND SRC_LIST HARDWARE/EXTI/exti.c)
ADD_EXECUTABLE(main ${SRC_LIST})

二、基本语法

1. 变量

SET(TOOLCHAIN_PREFIX arm-none-eabi-)
=>设置一个变量TOOLCHAIN_PREFIX,值为arm-none-eabi-
SET(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)
=>引用变量用 ${name}

2. 常用变量

CMAKE_C_COMPILER 指定C编译器
CMAKE_CXX_COMPILER 指定C++编译器
CMAKE_C_FLAGS 指定C编译选项
CMAKE_CXX_FLAGS 指定C++编译选项
CMAKE_EXE_LINKER_FLAGS 指定链接选项
CMAKE_SOURCE_DIR 工程目录顶层
CMAKE_CURRENT_SOURCE_DIR 当前CMakeLists.txt 所在的路径
CMAKE_CURRENT_LIST_FILE 当前CMakeLists.txt 的完整路径
CMAKE_CURRRENT_BINARY_DIR  当前make编译的目
EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH  生成target或库所在目录
PROJECT_NAME  项目名称
CMAKE_BUILD_TYPE Debug和Release两个选项

3. 常用命令

CMAKE_MINIMUM_REQUIRED(VERSION 3.0) cmake最低版本3.0
ADD_DEFINITIONS(-DSTM32F10X_HD)  添加宏定义
ADD_DEPENDENCIES(target-name depend-target1 depend-target2 ...) 定义target依赖其他target
ADD_EXECUTABLE(target ${SRC_LIST})  说明源文件编译生成target
ADD_LIBRARY(test SHARED|STATIC|MODULE] ${LIBHELLO_SRC}) 生成库文件
ADD_SUBDIRECTORY(src_dir [binary_dir])  向当前工程添加存放源文件的子目录
INCLUDE_DIRECTORIES(dir1 dir2 ...)  指定头文件的搜索路径, GCC -I
LINK_DIRECTORIES(dir1 dir2 ...)  动态链接库或静态链接库的搜索路径,GCC -L
TARGET_LINK_LIBRARIES(target ${test_library}) 添加链接库,GCC -l
LINK_LIBRARIES(c m nosys) 添加链接库,不指定target

三、编译

mkdir build && cd build
cmake ../
make clean && make
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值