views:

939

answers:

1

I am trying to automate my build process with cmake. There is currently only one issue:

Where is, in cmake's philosophy (if there is one), the best place to put the copying of data files.

I have a library and a few examples. The examples need the data.

I currently do the following:

I use a custom command in each example's CMakeLists.txt to copy all the Data into the CMAKE_CURRENT_BINARY_DIR in a post-build step. I use this in my debugging workflow, so no install target is executed yet.

This works quite well, but has certain drawbacks:

  1. The copying occurs everytime the project is built. With VS 2005 this sometimes occurs even if it is not newly built. Since the data folders are big, the copying takes time, and it gets a bit annoying.
  2. I am certain that this is a very clumsy way of doing this.

I want to copy those directories to the executable paths, so I don't need hints how to set the debug working directory

The perfect time to copy these directories would be at cmake configuration/generation time, at least I think so. Should I do this, and how would I do this?

A: 

As recently seen in this question, you can use configure_file to copy files to the build directory:

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/input.txt
    ${CMAKE_CURRENT_BINARY_DIR}/output.txt COPYONLY)

That does it once at build time and only when needed.

rq
Thanks! I am surprised that there are so few answers to this question. CMake is widely used now, but still poorly documented. Very few people seem to really grok cmake.
AndreasT
`cmake --help-full` FTW! :-)
rq