Копирование исполняемого файла и 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.