Копирование исполняемого файла и DLL-файлов в указанное пользователем место с помощью CMake в Windows

В CMake я хотел бы запустить команду post build, которая автоматически копирует исполняемый файл и требуемую dll в указанное пользователем местоположение. Это выполнимо с помощью CMake?

2 ответа

Решение

Это зависит от того, что вы хотите сделать. Вот 4 разных решения. Есть, вероятно, другие, чтобы добавить в этот список...

команда install()

Если вы хотите скопировать исполняемый файл и dll, который вы только что создали, вы можете использовать install() команда, но она будет работать только тогда, когда пользователь запустит make install,

Установка переменных

Если вы хотите сделать это непосредственно во время сборки, вы можете использовать переменные CMake для настройки вашей сборки. Эти переменные описаны по адресу http://www.cmake.org/Wiki/CMake_Useful_Variables

EXECUTABLE_OUTPUT_PATH 
  set this variable to specify a common place where CMake should put all executable files (instead of CMAKE_CURRENT_BINARY_DIR)
  SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) 
LIBRARY_OUTPUT_PATH 
  set this variable to specify a common place where CMake should put all libraries (instead of CMAKE_CURRENT_BINARY_DIR)
  SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

Пользовательская команда

Если вы хотите скопировать другой исполняемый файл или dll, который вы не создали самостоятельно (бинарные библиотеки и т. Д.), Хорошим решением будет использование пользовательской команды. В этом случае может быть очень сложно иметь портативное решение, работающее на всех ОС для копирования файлов. Вот почему CMake предоставляет эту функцию (вместе с другими) прямо из cmake исполняемым:

В командной строке вы можете использовать это:

cmake -E copy_if_different <SOURCE> <DESTINATION>

Не забывайте, что вы можете вызвать исполняемый файл cmake из файла CMakeLists, используя ${CMAKE_COMMAND} переменная;)

команда configure_file()

И чтобы закончить, configure_file() Команда позволяет вам создать файл из другого, заменив переменные их значением в целевом файле. Если исходный файл не содержит переменных, целевой файл является только копией исходного файла. Но я не знаю, работает ли он отлично с двоичным файлом. Вы должны тщательно проверить это самостоятельно.

Я добавил пользовательскую команду.

add_custom_command (TARGET FOLDER POST_BUILD COMMAND $ {CMAKE_COMMAND} -E copy_if_different SOURCE DESTINATION ")

и это копирует библиотеки DLL.

Чтобы скопировать исполняемый файл, я использовал простую команду INSTALL.

http://www.cmake.org/Wiki/CMake:Install_Commands

Другие вопросы по тегам