2016-06-08 5 views
0

Я хочу добавить ссылку ссылки в ссылку в CMake. Например. что-то вроде:Как получить целевое базовое имя в CMAKE_C_LINK_EXECUTABLE?

set(CMAKE_C_LINK_EXECUTABLE 
    "${CMAKE_C_LINK_EXECUTABLE}" 
    "postlink <TARGET> ${CMAKE_BINARY_DIR}/$$(basename <TARGET>).foo") 

$$(basename <TARGET>) является та часть, которая дает головную боль. Это не работает. Ни с обратными шагами. <TARGET_BASE> дает путь к файлу без расширения, но как избавиться от пути к каталогу? Я мог бы обойти это, используя сценарий оболочки для команды postlink, но это было бы довольно уродливо, и мне просто интересно, есть ли лучший способ сделать это.

ответ

0

Вы могли бы сделать это с add_custom_command(TARGET ... POST_BUILD ...), а затем изменить CMAKE_C_LINK_EXECUTABLE:

function(add_post_processing_to_target _target) 
    add_custom_command(
     TARGET ${_target} 
     POST_BUILD 
     COMMAND ${CMAKE_COMMAND} -E echo "--- postlink $<TARGET_FILE:${_target}>" 
     COMMAND postlink $<TARGET_FILE:${_target}> ${CMAKE_BINARY_DIR}/${_target}.foo 
    ) 
endfunction() 

Чтобы ответить на ваш первоначальный вопрос, попробуйте <TARGET_NAME>

+0

Я не могу использовать 'add_custom_command()', потому что он будет повторно запускаться при изменении целевого двоичного файла (например, когда он будет удален позже в сборке в нашем случае). Но '' именно то, что я искал. Спасибо, что указали мне на «документацию». – jil

+0

@jil Добро пожаловать. Но 'add_custom_command (... POST_BUILD ...)' просто заканчивается в «многострочной инструкции» (он не добавляет другую цель и не проверяет зависимости). Более или менее то же самое, что и модификация 'CMAKE_C_LINK_EXECUTABLE', просто чтобы вы могли использовать выражения генератора. Если вы создаете make-файлы, просто попробуйте мой код и посмотрите, что на самом деле создано. – Florian

Смежные вопросы