Скопировать файл в исполняемую директорию - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь скопировать файл в тот же каталог, где заканчивается исполняемый файл.Это означает включение каталога конфигурации "RelWithDebInfo" в Visual Studio.Любая переменная CMake, такая как «CMAKE_BINARY_DIR» и аналогичные, не включает эту папку в путь.

add_executable(${PROJECT_NAME} main.cpp)

add_custom_command(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt copy_this.txt
    COMMENT "Copying..."
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
)

Приведенный выше код работает, но не приводит к изменению файла, с которым он был повторно скопирован.Единственное другое решение, которое я нашел, где оно копирует, когда использует add_custom_command(OUTPUT copy_this.txt ...), но не копирует файл в правильную папку.

add_custom_command(
    OUTPUT copy_this.txt # this expects the file to be in ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt copy_this.txt
    COMMENT "Copying..."
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
)
add_custom_target(target_copy_this.txt DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt)

add_dependencies(${PROJECT_NAME} target_copy_this.txt)

1 Ответ

0 голосов
/ 30 ноября 2018

Команда add_custom_command должна быть обновлена, чтобы указать, куда файл должен быть скопирован.В обоих примерах файл копируется в текущий рабочий каталог, поскольку путь не указан.Вот пример того, как скопировать в домашний каталог.

set(newloc ~)

add_custom_command(
    OUTPUT ${newloc}/copy_this.txt
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt ${newloc}/copy_this.txt
    COMMENT "Copying to ${newloc}"
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/copy_this.txt
    )

add_custom_target(target_copy_this.txt ALL DEPENDS copy_this.txt)

Кажется, что вы хотите скопировать файл туда, где заканчивается одна из целей.В visual studio это может быть ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} или ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${CMAKE_CFG_INTDIR} в зависимости от того, что еще происходит в CMakeLists.txt.

. Используя этот пример и установив newloc в ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}, вы получите следующий вывод:

cmake --build . --config RelWithDebInfo

CustomBuild:
Copying to C:/Users/ZZZ/Projects/test/bld/RelWithDebInfo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...