针对MCU,编写CMakeLists.txt,使用make编译。
根目录创建CMakeLists.txt,编写内容:
cmake_minimum_required(VERSION 3.10)
project(led)
enable_language(ASM)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_SIZE arm-none-eabi-size)
add_definitions(
-DCPU_MIMXRT1064DVL6A
-DCPU_MIMXRT1064DVL6A_cm7
-DSDK_DEBUGCONSOLE=1
-DXIP_EXTERNAL_FLASH=1
-DXIP_BOOT_HEADER_ENABLE=1
-DPRINTF_FLOAT_ENABLE=0
-DSCANF_FLOAT_ENABLE=0
-DPRINTF_ADVANCED_ENABLE=0
-DSCANF_ADVANCED_ENABLE=0
-DSERIAL_PORT_TYPE_UART=1
-DCR_INTEGER_PRIN
#-D__MCUXPRESSO
-D__USE_CMSIS
-DNDEBUG
#-D__REDLIB__
)
#set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_BUILD_TYPE "Release")
#set(MCU_FLAGS "-std=gnu99 -ffunction-sections -fno-common -c -fdata-sections -ffreestanding -fno-builtin -fmerge-constants -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -fstack-usage")
set(MCU_FLAGS "-mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16")
set(CMAKE_C_FLAGS "${MCU_FLAGS} -Wall -Wno-unknown-pragmas")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g2 -ggdb")
set(CMAKE_C_FLAGS_RELEASE "-O3")
#message("CMAKE_C_FLAGS:${CMAKE_C_FLAGS}")
#message("CMAKE_C_FLAGS_DEBUG:${CMAKE_C_FLAGS_DEBUG}")
#message("CMAKE_C_FLAGS_RELEASE:${CMAKE_C_FLAGS_RELEASE}")
include_directories(
board
CMSIS
component/lists
component/serial_manager
component/uart
device
drivers
utilities
xip
${CMAKE_CURRENT_BINARY_DIR}
)
file(GLOB SRC_BOARD board/*.c)
file(GLOB SRC_COMPONENT1 component/lists/*.c)
file(GLOB SRC_COMPONENT2 component/serial_manager/*.c)
file(GLOB SRC_COMPONENT3 component/uart/*.c)
file(GLOB SRC_DEVICE device/*.c)
file(GLOB SRC_DRIVERS drivers/*.c)
file(GLOB SRC_STARTUP startup/*.c)
file(GLOB SRC_UTILIIES utilities/*.c)
file(GLOB SRC_XIP xip/*.c)
add_library(bsp_lib
${SRC_BOARD}
${SRC_COMPONENT1}
${SRC_COMPONENT2}
${SRC_COMPONENT3}
${SRC_DEVICE}
${SRC_DRIVERS}
${SRC_STARTUP}
${SRC_UTILIIES}
)
set(XIP_LIB_NAME xip_lib)
add_library(${XIP_LIB_NAME}
STATIC ${SRC_XIP}
)
set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/scripts/nxp.ld)
set(CMAKE_EXTERNAL_FLAGS " -Wl,--sort-section=alignment -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb ")
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXTERNAL_FLAGS} --specs=nano.specs -specs=nosys.specs -static -T${LINKER_SCRIPT} -Wl,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map -Wl,--cref -Wl,--gc-sections -Wl,-print-memory-usage"
)
file(GLOB SRC_MAIN source/*.c)
add_executable(${PROJECT_NAME}.elf ${SRC_MAIN})
target_link_libraries(${PROJECT_NAME}.elf
bsp_lib
-Wl,--whole-archive ${XIP_LIB_NAME} -Wl,--no-whole-archive
)
set(ELF_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.elf)
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(TARGET "${PROJECT_NAME}.elf" POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O binary ${ELF_FILE} ${BIN_FILE}
COMMAND ${CMAKE_OBJCOPY} -O ihex ${ELF_FILE} ${HEX_FILE}
COMMENT "asasadsc----------------"
COMMENT "Building ${PROJECT_NAME}.bin and ${PROJECT_NAME}.hex"
COMMAND ${CMAKE_COMMAND} -E copy ${HEX_FILE} "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.hex"
COMMAND ${CMAKE_COMMAND} -E copy ${BIN_FILE} "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.bin"
COMMAND ${CMAKE_SIZE} --format=berkeley ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex
COMMENT "Invoking: Cross ARM GNU Print Size---"
)
编译
mkdir build
cd bulid
cmake ..
make
可直接使用此工程:
https://download.csdn.net/download/niu_88/13995930
注意:
1、将未被调用的lib库强行链接到可执行文件
-Wl,–whole-archive xxx -Wl,–no-whole-archive