[CMake] Copy files to build folder

Andreas Pakulat apaku at gmx.de
Tue Jan 17 08:02:49 EST 2012


On 17.01.12 12:54:28, Tim Hutton wrote:
> We've got this section in our CMakeLists.txt:
> 
> #--------------------------copy pattern files to build
> folder---------------------------------
> 
> file( GLOB_RECURSE pattern_files RELATIVE
> "${CMAKE_CURRENT_SOURCE_DIR}/" "patterns/*.vti" )
> foreach( pattern_file ${pattern_files} )
>   add_custom_command(
>     OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${pattern_file}"
>     COMMAND cmake -E copy
> "${CMAKE_CURRENT_SOURCE_DIR}/${pattern_file}"
> "${CMAKE_CURRENT_BINARY_DIR}/${pattern_file}"
>     DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${pattern_file}"
>   )
>   list( APPEND pattern_files_dest "${pattern_file}" )
> endforeach( pattern_file )
> 
> add_custom_target( CopyPatterns ALL DEPENDS ${pattern_files_dest} )
> 
> #-----------------------------------------------------------------------------------------------
> 
> The idea is to copy all the *.vti files in the "patterns" folder (and
> subfolders) into the build folder, so our program can load them. This
> works fine when running CMake for the first time. However, if we add a
> new pattern file it doesn't get picked up, even after make clean. (It
> works if we edit the CMakeLists.txt, or delete everything in the build
> folder.) Is there a way to make this work every time?

Don't use GLOB, but list all files individually in a variable and
iterate over that. CMake is not executed when doing a make call and no
cmake-related file has changed and hence the above code is not re-run on
each make call.

Andreas



More information about the CMake mailing list