make编译MCU(nxp1064)基于CMakeLists.txt

针对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

猜你喜欢

转载自blog.csdn.net/niu_88/article/details/112057004