Различные параметры компоновщика для каждого исполняемого файла - PullRequest
0 голосов
/ 17 октября 2018

Я хотел бы создать два отдельных исполняемых файла из одних и тех же исходных файлов, но с разными параметрами компоновщика.

С помощью приведенных выше строк я могу без проблем создать один исполняемый файл:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --specs=nano.specs -T libs.ld -T mem.ld -T sections.ld -L\"${CMAKE_CURRENT_SOURCE_DIR}/script\" -Wl,-Map,${MAP_NAME}")

add_executable(${ELF_NAME} ${PRJ1_SOURCE_FILES} ${PRJ1_HEADER_FILES})
target_link_libraries(${ELF_NAME} PRIVATE liba libb libc)

Когда я добавляю следующие две строки в конце приведенного выше кода, я очень хорошо могу сгенерировать второй исполняемый файл (с такими же флагами компоновщика), кроме первого, без проблем:

add_executable(${ELF2_NAME} ${PRJ1_SOURCE_FILES} ${PRJ1_HEADER_FILES})
target_link_libraries(${ELF2_NAME} PRIVATE liba libb libc)

Но моя проблема в том,что мне нужно сгенерировать второй исполняемый файл (одновременно с первым) с другими параметрами компоновщика.Я не хочу использовать условные операторы для генерации одного за другим.Моя цель - автоматизировать процесс.

Как этого добиться?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Пока ответ Камиля хорош, но я полагаю, что вопрос, который вы задаете, должным образом решен в следующей версии CMake v3.13.

target_link_options был введен для этой цели,

"Укажите параметры ссылки, которые следует использовать при связывании заданной цели. Имена должны быть созданы такой командой, как add_executable () или add_library (), и не должны быть целью ALIAS."

https://cmake.org/cmake/help/v3.13/command/target_link_options.html#command:target_link_options

0 голосов
/ 17 октября 2018

Используйте set_target_properties со свойством LINK_FLAGSset_target_properties manual:

set_target_properties (target1 target2 ... PROPERTIES prop1 value1 prop2 value2 ...)
Установить свойства для цели.
...
См. Свойства на объектах для ознакомления со списком свойств, известных CMake.

В свойствах ссылки на объекты мы можем найти LINK_FLAGS :

Дополнительные флаги для использования при связывании этой цели.

Свойство LINK_FLAGS можно использовать для добавления дополнительных флагов к шагу связи цели.LINK_FLAGS_ добавит в конфигурацию, например, DEBUG, RELEASE, MINSIZEREL, RELWITHDEBINFO.

Поэтому используйте что-то похожее на:

set_target_properties(${ELF_NAME} PROPERTIES LINK_FLAGS " --specs=rdimon.specs")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...