无法使用CMakelists创建十六进制小精灵文件

发布于 2025-02-10 01:35:59 字数 2820 浏览 4 评论 0原文

我正在尝试使用CMakelists使用IAR文件为我的眨眼项目创建一个十六进制和精灵文件。

汇编与CMAKE没有错误,但我看不到构建文件夹中的文件。 我的目标是创建一个十六进制和小精灵文件,以供以后闪烁。

有人可以告诉我我应该修改什么来解决这个问题吗? 非常感谢

Cmakelists:

    cmake_minimum_required(VERSION 3.7.2)

######################################################################
#
#   Project
#
######################################################################

project(blink_cortex_m0plus)
enable_language(ASM)

######################################################################
#
#   CPP Definitions
#
######################################################################

set(PROJECT_FLAGS_ARCH
    "-mcpu=cortex-m0plus \
     -mthumb"
)

set(PROJECT_LINKER_FLAGS
    "-Wl,-Map=${PROJECT_NAME}.map \
    -L${PROJECT_SOURCE_DIR}/../config/ \
    -Tlinker.ld"
)

set(PROJECT_C_FLAGS_WARNINGS   "${COMMON_FLAGS_WARNINGS} ${C_FLAGS_WARNINGS_EXTRA}")


######################################################################
#
#   Sources
#
######################################################################

set(PROJECT_INCLUDE_DIRS
    ${PROJECT_CONFIG_DIR}
    ${BLINK_DIR}/../
    ${CYPRESS_CORE_LIBRARY}
)

set(PROJECT_SRCS
    ${PROJECT_SOURCE_DIR}/main_cm0plus.c
    ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY}system_tviibe1m_cm0plus.c
    ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY}startup_cm0plus.S
)

######################################################################
#
#   TARGET
#
######################################################################

set (CMAKE_C_FLAGS   "${C_FLAGS} ${C_FLAGS_WARNINGS}  ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
set (CMAKE_ASM_FLAGS "${C_FLAGS}   ${C_FLAGS_WARNINGS}   ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
#set (CMAKE_CXX_FLAGS "${CXX_FLAGS} ${CXX_FLAGS_WARNINGS} ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
set (CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS} ${PROJECT_LINKER_FLAGS} ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")

set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)


include_directories(
        ${PROJECT_INCLUDE_DIRS}
        ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY_INCLUDE_DIRS}
# )


add_executable(${PROJECT_NAME}.elf ${PROJECT_SRCS} ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY_SRCS})

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.map")
set(HEX_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE} \nBuilding ${BIN_FILE}")
        
    

I am trying to use cmakelists to create a hex and elf file for my blinkled project, using IAR files.

The compilation is without errors with cmake but I dont see the files in the build folder.
my goal is to create a hex and elf files for flashing pursoses later on.

Can someone please tell me what I should modify to solve this problem?
thanks a lot

cmakelists:

    cmake_minimum_required(VERSION 3.7.2)

######################################################################
#
#   Project
#
######################################################################

project(blink_cortex_m0plus)
enable_language(ASM)

######################################################################
#
#   CPP Definitions
#
######################################################################

set(PROJECT_FLAGS_ARCH
    "-mcpu=cortex-m0plus \
     -mthumb"
)

set(PROJECT_LINKER_FLAGS
    "-Wl,-Map=${PROJECT_NAME}.map \
    -L${PROJECT_SOURCE_DIR}/../config/ \
    -Tlinker.ld"
)

set(PROJECT_C_FLAGS_WARNINGS   "${COMMON_FLAGS_WARNINGS} ${C_FLAGS_WARNINGS_EXTRA}")


######################################################################
#
#   Sources
#
######################################################################

set(PROJECT_INCLUDE_DIRS
    ${PROJECT_CONFIG_DIR}
    ${BLINK_DIR}/../
    ${CYPRESS_CORE_LIBRARY}
)

set(PROJECT_SRCS
    ${PROJECT_SOURCE_DIR}/main_cm0plus.c
    ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY}system_tviibe1m_cm0plus.c
    ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY}startup_cm0plus.S
)

######################################################################
#
#   TARGET
#
######################################################################

set (CMAKE_C_FLAGS   "${C_FLAGS} ${C_FLAGS_WARNINGS}  ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
set (CMAKE_ASM_FLAGS "${C_FLAGS}   ${C_FLAGS_WARNINGS}   ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
#set (CMAKE_CXX_FLAGS "${CXX_FLAGS} ${CXX_FLAGS_WARNINGS} ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")
set (CMAKE_EXE_LINKER_FLAGS "${LINKER_FLAGS} ${PROJECT_LINKER_FLAGS} ${FLAGS_OPTIMIZATION} ${PROJECT_FLAGS_ARCH}")

set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)


include_directories(
        ${PROJECT_INCLUDE_DIRS}
        ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY_INCLUDE_DIRS}
# )


add_executable(${PROJECT_NAME}.elf ${PROJECT_SRCS} ${CYPRESS_PERIPHERAL_DRIVERS_LIBRARY_SRCS})

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.map")
set(HEX_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_SOURCE_DIR}/build/${PROJECT_NAME}.bin)

add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
        COMMAND ${OBJCOPY} -Oihex 
lt;TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
        COMMAND ${OBJCOPY} -Obinary 
lt;TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
        COMMENT "Building ${HEX_FILE} \nBuilding ${BIN_FILE}")
        
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗梦空间 2025-02-17 01:35:59

我使用以下命令转换为.bin和.hex:

add_custom_command(TARGET ${APPLICATION}
    POST_BUILD
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND ${OBJCOPY} ARGS -O binary ${APPLICATION} ${APPLICATION_BIN}
    COMMAND ${OBJCOPY} ARGS -O ihex -R .eeprom -R .fuse -R .lock -R .signature ${APPLICATION} ${APPLICATION_HEX}
)

一个值得注意的区别是args,如下所示: https ://stackoverflow.com/a/53573133

I convert to .bin and .hex it with the following command:

add_custom_command(TARGET ${APPLICATION}
    POST_BUILD
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND ${OBJCOPY} ARGS -O binary ${APPLICATION} ${APPLICATION_BIN}
    COMMAND ${OBJCOPY} ARGS -O ihex -R .eeprom -R .fuse -R .lock -R .signature ${APPLICATION} ${APPLICATION_HEX}
)

One notable difference is the ARGS as suggested here: https://stackoverflow.com/a/53573133

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文