Netrix
Netrix

Reputation: 342

How to make CMake reconfiguration depend on custom file?

I have a project under CMake with some files generated with python generator from XML files. I cannot specify all files generated by this generator in CMakeLists.txt so I use file globbing for this.

The problem is that when I update my XML files or generator sources (which are in the same repository) I would like to have my build system reconfigured so changed files are taken into account when rebuilding the code (via make for example).

Is it possible to make CMake treat some files like it treats CMakeLists.txt files and to make it regenerate build system when those file are changed?

Upvotes: 14

Views: 7345

Answers (3)

Sergey Kolesnik
Sergey Kolesnik

Reputation: 3630

Since it has been a while I will add to @roolebo's answer.

There's actually a better command to add a dependency on a file: set_directory_properties(PROPERTIES CMAKE_CONFIGURE_DEPENDS <relative_or_full_path_to_file>)

What might be confusing is that this command adds a property to the current directory. Well, it does not matter since you can set a full path to a file that resides outside of the current directory's scope, for instance: ../../config.json

Upvotes: 0

roolebo
roolebo

Reputation: 944

It doesn't require any kind of workarounds. The standard way is to use CMAKE_CONFIGURE_DEPENDS property:

set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS <filename>)

Upvotes: 31

Yes, you should be able to do that by (ab)using configure_file(). Configuring a file makes the source a dependency of the CMake run, so that any changes in it cause a reconfiguration. Simply like this:

configure_file(MyInputFile.xml DummyOutput.xml)

Upvotes: 2

Related Questions