Cmake: используйте add_custom_command, чтобы скопировать двоичный файл в определенное местоположение, если местоположение не существует - PullRequest
9 голосов
/ 25 мая 2011

Я пытаюсь скопировать все двоичные файлы, сгенерированные cmake, в определенный каталог. Я не хочу использовать EXECUTABLE_OUTPUT_PATH, хранение их в дереве сборки облегчает разработку.

Поэтому я использую add_custom_command для добавления копии пост-сборки

# set the final binary dir
set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/bin)

# get name and location of binary, namecan change with os (cf. ".exe" suffix on windows)
GET_TARGET_PROPERTY(EXAMPLE_BIN_NAME example LOCATION)
# copy bin to binary folder
ADD_CUSTOM_COMMAND(TARGET example
          POST_BUILD
          COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)

Проблема в том, что при первой сборке папка "bin" не существует (ошибка копирования), но папка "bin" создается сразу после нее. Так что при второй сборке копия работает.

Есть ли способ заставить пользовательскую команду создать папку bin, а затем скопировать двоичный файл? Или возможно иметь два EXECUTABLE_OUTPUT_PATH с cmake?

Спасибо!

1 Ответ

18 голосов
/ 25 мая 2011

Просто убедитесь, что целевое местоположение "bin" существует, прежде чем вызывать команду копирования, т. Е .:

ADD_CUSTOM_COMMAND(TARGET example
          POST_BUILD
          COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}
          COMMAND ${CMAKE_COMMAND} -E copy ${EXAMPLE_BIN_NAME} ${PROJECT_BINARY_DIR}/.
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...