Отложите создание пользовательской цели до установки - PullRequest
6 голосов
/ 26 декабря 2011

У меня есть что-то подобное в моем проекте:

add_custom_command(OUTPUT somefile)
add_custom_target(tgt ALL DEPENDS somefile)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir)

Это работает нормально, но моя команда выполняется во время make из-за ключевого слова ALL в add_custom_target (). Я хочу, чтобы CMake запускал эту команду только при выдаче make install, а не во время сборки.

Если я удаляю ключевое слово ALL, целая цель по умолчанию не создается, поэтому не создается какой-либо файл и make install завершается неудачей.

1 Ответ

8 голосов
/ 27 декабря 2011

Возможное решение состоит в том, чтобы команда make install вызывала make tgt в качестве побочного эффекта.Это можно сделать с помощью CODE подписи команды install :

add_custom_command(OUTPUT somefile)
add_custom_target(tgt DEPENDS somefile)

install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir)

execute_process вызывает cmake для создания цели tgt до установки somefile.

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