На основании ответа от Сета Джонсона, вот что я написал для большего удобства.
# Always define the target
add_custom_target(copy_resources ALL COMMENT "Copying resources…")
# Copy single files
macro(add_files_to_environment files)
add_custom_command(TARGET copy_resources POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${ARGV} ${CMAKE_CURRENT_BINARY_DIR})
endmacro()
# Copy full directories
macro(add_directory_to_environment distant local_name)
file(GLOB_RECURSE DistantFiles
RELATIVE ${distant}
${distant}/*)
foreach(Filename ${DistantFiles})
set(SRC "${distant}/${Filename}")
set(DST "${CURRENT_BUILD_DIR}/${local_name}/${Filename}")
add_custom_command(TARGET copy_resources POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DST})
message(STATUS "file ${Filename}")
endforeach(Filename)
endmacro()
EDIT: Это не работает должным образом. Это работает безупречно.
# Copy single files
macro(resource_files files)
foreach(file ${files})
message(STATUS "Copying resource ${file}")
file(COPY ${file} DESTINATION ${Work_Directory})
endforeach()
endmacro()
# Copy full directories
macro(resource_dirs dirs)
foreach(dir ${dirs})
# Replace/at the end of the path (copy dir content VS copy dir)
string(REGEX REPLACE "/+$" "" dirclean "${dir}")
message(STATUS "Copying resource ${dirclean}")
file(COPY ${dirclean} DESTINATION ${Work_Directory})
endforeach()
endmacro()
При использовании режима cmake -E легко скопировать файл или каталог. Большое спасибо –
Отредактировано, потому что это принятый ответ, а другой ответ с файлом (команда COPY чиста. –
Да, но можете ли вы запустить файл (COPY ...) как пользовательскую команду, которая зависит от цели? – juzzlin