Я использую CMake 3.17 и набор инструментов GNU ARM и пытаюсь перенести сборку с Eclipse на CMake. Часть сборки Eclipse определяет несколько файлов сценариев компоновщика для использования во время компоновки, поэтому я настроил свои CMakeLists. txt следующим образом:
target_link_options(${application_name} PRIVATE
-mcpu=cortex-m4
-mthumb
-mfloat-abi=hard
-mfpu=fpv4-sp-d16
-fmessage-length=0
-fsigned-char
-ffunction-sections
-fdata-sections
-flto
-Wall
-Xlinker --gc-sections
-Wl,-Map,${map_file}
-T ${CMAKE_SOURCE_DIR}/ldscripts/libs.ld
-T ${CMAKE_SOURCE_DIR}/ldscripts/mem.ld
-T ${CMAKE_SOURCE_DIR}/ldscripts/sections.ld
)
Но когда я запускаю make
, опция -T
проглатывается для второго и третьего файлов. Вот что я получаю при запуске make VERBOSE=1
после успешной компиляции всех исходников . Командная строка компоновщика, за которой следует предупреждение об отсутствии параметров -T
:
Linking CXX executable StartupSequence.elf
/D/gcc-arm-none-eabi-9-2019-q4/bin/arm-none-eabi-g++.exe --specs=nano.specs --specs=nosys.specs -g -Og -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -flto -Wall -Xlinker --gc-sections -Wl,-Map,StartupSequence.map -T C:/svn/startup_sequence/ldscripts/libs.ld C:/svn/startup_sequence/ldscripts/mem.ld C:/svn/startup_sequence/ldscripts/sections.ld @CMakeFiles/StartupSequence.dir/objects1.rsp -o StartupSequence.elf ../Drivers/CMSIS/DSP/Lib/libarm_cortexM4lf_math.a ../Middlewares/Third_Party/mbedTLS/library/libmbedcrypto.a
d:/gcc-arm-none-eabi-9-2019-q4/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: C:/svn/startup_sequence/ldscripts/sections.ld contains output sections; did you forget -T?
Почему -T
не отправляется в командную строку должным образом для последних двух файлов?
Я пробовал разделить спецификацию скрипта ссылки на три отдельных вызова target_link_options
и заключить каждую спецификацию скрипта в двойные кавычки, но это, похоже, не имеет никакого эффекта.