[CMake] Copying matching files

Brad King brad.king at kitware.com
Tue Oct 3 11:07:12 EDT 2006


Hugo Costelha wrote:
> I need to copy all files that match a certain patter during compilation time. 
> I am currenlty using the following in CMakeLists.txt:
> 
> FILE(GLOB luts "lut*")
> FOREACH(file ${luts})
>     GET_FILENAME_COMPONENT(basename ${file} NAME)
>     ADD_CUSTOM_TARGET( luts ALL
>                        COMMAND ${CMAKE_COMMAND}
>                         -E copy ${file} ${LIBRARY_OUTPUT_PATH} )
> ENDFOREACH(file)
> 
> 
> However, there is a huge problem with this code. It creates fixed rules when 
> running "cmake .", i.e., if I run "cmake .", then create a file lutA, then 
> run make, it will not copy lutA, since it didn't exist when I ran cmake.
> 
> Does anyone know of a good alternative to do this, that really performs 
> something like "cp lut* <location>"?

You can add a custom target that runs

cmake -P myscript.cmake

and then put the glob/copy code in the script.  In the script use
EXECUTE_PROCESS to call cmake -E copy in a FOREACH on the result of the
glob.

-Brad


More information about the CMake mailing list