You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.1 KiB
CMake

#
# Utility macros for copying files
#
# Last update: 9th January 2013
#
#
# Create a target for copying files.
#
if (NOT TARGET copy_files)
add_custom_target(copy_files ALL)
endif()
#
# Create a variable to keep track of the number of copy files targets created.
#
if (NOT copy_target_count)
set(copy_target_count 0)
endif (NOT copy_target_count)
set(copy_target_count ${copy_target_count} CACHE INTERNAL "" FORCE)
#-------------------------------------------------------------------------------
# Macro: COPY_FILES
#-------------------------------------------------------------------------------
#
# Description:
# Adds a command to the build target 'copy_files' which copies files matching
# the specifeid globbing expression from the specified source directory to
# the specified destination directory.
#
# Usage:
# COPY_FILES(SRC_DIR GLOB_PAT DST_DIR)
#
# Arguments:
# - SRC_DIR : The source directory containging files to be copied.
# - GLOB_PAT : globbing expression used to match files for copying.
# - DST_DIR : The destination directory where files are to be copied to.
#
# Example:
# copy_files(${CMAKE_CURRENT_SOURCE_DIR} *.dat ${CMAKE_CURRENT_BINARY_DIR})
# Will copy all files in the current source directory with the extension
# '.dat' into the current binary directory.
#
macro(COPY_FILES SRC_DIR GLOB_PAT DST_DIR)
file(GLOB file_list
RELATIVE ${SRC_DIR}
${SRC_DIR}/${GLOB_PAT})
math(EXPR copy_target_count '${copy_target_count}+1')
set(copy_target_count ${copy_target_count} CACHE INTERNAL "" FORCE)
set(target "copy_files_${copy_target_count}")
add_custom_target(${target})
foreach(filename ${file_list})
set(src "${SRC_DIR}/${filename}")
set(dst "${DST_DIR}/${filename}")
add_custom_command(TARGET ${target} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${src} ${dst}
COMMENT "copying: ${src} to ${dst} " VERBATIM
)
endforeach(filename)
#add_dependencies(copy_files ${target})
add_dependencies(copy_files crowxmr)
endmacro(COPY_FILES)
#-------------------------------------------------------------------------------
# Macro: COPY_FILE
#-------------------------------------------------------------------------------
#
# Description:
# Adds a command to the build target 'copy_files' which copies the specified
# file to the specified destination.
#
# Usage:
# COPY_FILE(SRC DST)
#
# Arguments:
# - SRC : The source filename path (the file to be copied).
# - DST : The destiation filename path.
#
# Example:
# copy_file(
# ${CMAKE_CURRENT_SOURCE_DIR}/myfile.txt
# ${CMAKE_CURRENT_BINARY_DIR}/myfile.txt
# )
#
macro(COPY_FILE SRC DST)
math(EXPR copy_target_count '${copy_target_count}+1')
set(copy_target_count ${copy_target_count} CACHE INTERNAL "" FORCE)
set(target "copy_files_${copy_target_count}")
add_custom_target(${target})
add_custom_command(TARGET ${target} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${SRC} ${DST}
COMMENT "copying: ${SRC} to ${DST}" VERBATIM
)
add_dependencies(copy_files ${target})
endmacro(COPY_FILE)