【发布时间】:2019-05-02 19:46:15
【问题描述】:
我在 CMake 项目中创建了多个目标。每个目标都有不同的链接脚本(LD 文件)。如何编写 CMakeLists.txt 文件来实现这一点?这适用于带有 C/C++/ASM 文件的嵌入式项目。
这是我目前所拥有的。问题是 LINKER_SCRIPT 是全局定义的,而不是针对每个目标的。
# add alpha target
add_executable(alpha.elf ${SOURCES})
target_compile_definitions(alpha.elf PUBLIC -DALPHA_DEFINED)
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/Linker/alpha.ld)
# add beta target
add_executable(beta.elf ${SOURCES})
target_compile_definitions(beta.elf PUBLIC -DBETA_DEFINED)
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/Linker/beta.ld)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} -T ${LINKER_SCRIPT}")
问题是 LINKER_SCRIPT 被覆盖,最后一个定义是使用的。我怎样才能做到这一点?
我尝试使用以下方法定义每个目标变量,但输出与预期不符。该文件被编译,但是事情不在他们应该在的地方。例如,生成的 HEX 文件不是从 0x08000000 开始,而这应该是每个 LD 文件定义的位置。
set_target_properties(alpha.elf PROPERTIES
CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map=${PROJECT_BINARY_DIR}/alpha.elf.map -T ${CMAKE_SOURCE_DIR}/Linker/alpha.ld")
【问题讨论】: