一、同时拥有两个工程项目时的配置(APP IAP)方便git等工具的管理
1.1、目录结构如下:
|-Power_prj
|-CMakelists.txt
| |-Power_APP
| | |-src
| | |-include
| | |-main.c
| | |-CMakelists.txt
| |-Power_IAP
| | |-src
| | |-include
| | |-main.c
| | |-CMakelists.txt
1.2、CMakelists.txt说明:
Power_prj下的CMakelists.txt里面包含两个项目即可
cmake_minimum_required(VERSION 3.14.0)
project(hc32f072_prj)
# 添加子目录,这会触发子目录中的CMakeLists.txt文件的执行
add_subdirectory(Power_APP/)
add_subdirectory(Power_IAP/)
对应Power_APP与Poer_IAP中的CMakelists.txt按实际需求编写,路径生成文件通过set(CUSTOM_BIN_DIR "${CMAKE_BINARY_DIR}/Power_IAP") 配置。另头文件的使用需使用target_include_directories进行路径的加载,否则源文件中调用时需要指定绝对路径,示例如下(Power_IAP):
cmake_minimum_required(VERSION 3.14.0)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CUSTOM_BIN_DIR "${CMAKE_BINARY_DIR}/Power_IAP")
project(hc32f072_Iap)
enable_language(ASM C)
# 全局宏定义
add_definitions(
-D__STACK_SIZE=8*1024
-D__HEAP_SIZE=32*1024
-DHC32F448
-DUSE_DDL_DRIVER
)
add_compile_options(
-mno-unaligned-access
-fgnu89-inline
# -mstrict-align
)
add_executable(
${PROJECT_NAME}.elf
# startup files
prj/startup/startup_ARMCM4.S
prj/startup/vector.c
# libc files
prj/libc/libc-hooks.c
# hc32 ll library files
Lib/src/hc32_ll_adc.c
Lib/src/hc32_ll_aes.c
Lib/src/hc32_ll_aos.c
Lib/src/hc32_ll_clk.c
Lib/src/hc32_ll_cmp.c
Lib/src/hc32_ll_crc.c
Lib/src/hc32_ll_ctc.c
Lib/src/hc32_ll_dac.c
Lib/src/hc32_ll_dbgc.c
Lib/src/hc32_ll_dcu.c
Lib/src/hc32_ll_dma.c
Lib/src/hc32_ll_efm.c
Lib/src/hc32_ll_emb.c
Lib/src/hc32_ll_event_port.c
Lib/src/hc32_ll_fcg.c
Lib/src/hc32_ll_fcm.c
Lib/src/hc32_ll_gpio.c
Lib/src/hc32_ll_hash.c
Lib/src/hc32_ll_i2c.c
Lib/src/hc32_ll_icg.c
Lib/src/hc32_ll_interrupts.c
Lib/src/hc32_ll_keyscan.c
Lib/src/hc32_ll_mcan.c
Lib/src/hc32_ll_mpu.c
Lib/src/hc32_ll_pwc.c
Lib/src/hc32_ll_qspi.c
Lib/src/hc32_ll_rmu.c
Lib/src/hc32_ll_rtc.c
Lib/src/hc32_ll_smc.c
Lib/src/hc32_ll_spi.c
Lib/src/hc32_ll_sram.c
Lib/src/hc32_ll_swdt.c
Lib/src/hc32_ll_tmr0.c
Lib/src/hc32_ll_tmr4.c
Lib/src/hc32_ll_tmr6.c
Lib/src/hc32_ll_tmra.c
Lib/src/hc32_ll_trng.c
Lib/src/hc32_ll_usart.c
Lib/src/hc32_ll_utility.c
Lib/src/hc32_ll_wdt.c
Lib/src/hc32_ll.c
#application files
src/IAP_Init/IAP_Init.c
src/uFlash/uFlash.c
src/com/com.c
src/Modem/modem.c
src/SysTick/SysTick.c
src/main.c
# App/BootLoader/BootLoader.c
# dev files
# Dev/Relay/Fan_P.c
# Dev/Lora/Lora.c
# Dev/SD2506/SD2506API.c
Dev/bsp/bsp_clk.c
Dev/bsp/bsp_usart.c
Dev/bsp/bsp_crc.c
Dev/bsp/bsp_ringbuf.c
# Dev/bsp/bsp_flash.c
# Dev/bsp/bsp_timer.c
# Dev/bsp/bsp_wdt.c
# Dev/bsp/bsp_I2C.c
Dev/HC32_Common/ev_hc32f448_lqfp80.c
Dev/HC32_Common/system_hc32f448.c
Dev/WDI/WDI_Init.c
)
target_include_directories(
${PROJECT_NAME}.elf
PRIVATE
# app include files dir
# ./App/BootLoader
./src/uFlash
./src/com
./src/IAP_Init
./src/Modem
./src/SysTick
# dev include files dir
./Dev/bsp
./Dev/WDI
./Dev/HC32_Common
#lib include files dir
./Lib/inc
)
target_compile_options(
${PROJECT_NAME}.elf
PRIVATE
)
target_link_options(
${PROJECT_NAME}.elf
PRIVATE
-T${CMAKE_SOURCE_DIR}/Power_IAP/prj/linker/gcc.ld
)
add_custom_target(
${PROJECT_NAME}.asm
DEPENDS
${PROJECT_NAME}.elf
COMMAND
${CMAKE_OBJDUMP} -d ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf > ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.asm
)
add_custom_target(
${PROJECT_NAME}.bin
DEPENDS
${PROJECT_NAME}.elf
COMMAND
${CMAKE_OBJCOPY} -O binary ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.bin
)
add_custom_target(${PROJECT_NAME}.hex
DEPENDS
${PROJECT_NAME}.elf
COMMAND
${CMAKE_OBJCOPY} -O ihex ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.hex
)
add_custom_target(${PROJECT_NAME}.info
DEPENDS
${PROJECT_NAME}.asm
COMMAND
${CMAKE_SIZE} ${CUSTOM_BIN_DIR}/${PROJECT_NAME}.elf
)
二、cmake使用命令暂记
2.1、Windows下使用cmake清除build下的文件:
cmake --build ./ --target clean