[CMake] Copying matching files

Hugo Costelha hugo.costelha at gmail.com
Tue Oct 3 12:47:13 EDT 2006


On Tuesday 03 October 2006 17:03, Hugo Costelha wrote:
> On Tuesday 03 October 2006 16:07, you wrote:
> > 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.
>
> Thanks for the quick reply. However, I still have a problem. Running the
> script, it has no knowledge of  ${LIBRARY_OUTPUT_PATH}, which has been
> defined previously. Can I pass some arguments, or something?
>

Ok, I found out I can add "-DLIBRARY_OUTPUT_PATH=${LIBRARY_OUTPUT_PATH}" to 
the ADD_CUSTOM_TARGET in order to specify the var.

Thanks again for the help,

Hugo Costelha


More information about the CMake mailing list