微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CMake:如何将构建文件放入所选目录

如何解决CMake:如何将构建文件放入所选目录

我尝试使用 CMake 和 arm-none-eabi-gcc(mingw32-make 作为 make)编译我的 Cortex-M0 项目。 一切正常,我得到了我的十六进制和二进制结果,但我希望它们不在 CMakeLists.txt 的主目录中,而是在单独的目录中,例如“bin”。 我发现 CMAKE_RUNTIME_OUTPUT_DIRECTORY 必须做这件事,但它不能正常工作。 我尝试在我的 CMakeLists.txt 中定义它:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)

但我在链接过程中遇到此错误

[100%] Linking C executable bin\xxx.out
arm-none-eabi-size: ‘xxx.out’: No such file
mingw32-make[2]: *** [CMakeFiles\xxx.out.dir\build.make:913: bin/xxx.out] Error 1
mingw32-make[2]: *** Deleting file ‘bin/xxx.out’
mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/xxx.out.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2

bin 目录已创建,但它是空的,所以可能 xxx.out 没有正确创建。我怎么能让它工作? 如果我删除 CMAKE_RUNTIME_OUTPUT_DIRECTORY 定义,一切正常,链接成功,但我的所有文件(xxx.out、xxx.bin、xxx.hex)都放在根目录中。

这是我的 CMakeLists.txt 的全部内容

cmake_minimum_required(VERSION 3.5)
project(xxx)

enable_language(C ASM)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_required ON)
set(CMAKE_C_EXTENSIONS OFF)

set(EXECUTABLE ${PROJECT_NAME}.out)

#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin)

include_directories(src)
set(sources
src/main.c
)
add_executable (${EXECUTABLE} ${sources})

target_compile_deFinitions(${EXECUTABLE} PRIVATE
-D__ATSAMC21E18A__
-D__TARGET_cpu_CORTEX_M0
)

target_compile_options(${EXECUTABLE} PRIVATE
-mcpu=cortex-m0plus
-march=armv6-m
-mthumb
-mfloat-abi=soft
-fdata-sections
-ffunction-sections
-fno-strict-aliasing
-Wall
-O2
)

target_link_options(${EXECUTABLE} PRIVATE
-Tsys/samc21g18a_release.ld
-mcpu=cortex-m0plus
-march=armv6-m
-mthumb
-mfloat-abi=soft
-Wl,-Map=${PROJECT_NAME}.map,–cref
-specs=nano.specs
-Wl,–gc-sections
-lm
-lc
-lnosys
)

target_link_libraries(${EXECUTABLE} PRIVATE
m
)

add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND arm-none-eabi-size ${EXECUTABLE})

add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND arm-none-eabi-objcopy -O ihex ${EXECUTABLE} ${PROJECT_NAME}.hex
COMMAND arm-none-eabi-objcopy -O binary ${EXECUTABLE} ${PROJECT_NAME}.bin)

你有什么想法吗?提前致谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。