edA-qa mort-ora-y
edA-qa mort-ora-y

Reputation: 31951

CMake dependency on defined (preprocessor) header file

I have a configuration file setup that defines the correct header files to include for certain components. Later I include that file via the preprocessor token. Unfortunately CMake's dependency scanner completely ignores the header file.

Essentially it comes down to this:

#define HEADER_FILE "somefile.h"
#include HEADER_FILE

CMake does not add "somefile.h" to the list of dependencies for this source file!

How can I get CMake to recognize this dependency correctly?

(I know that I can do #if 0 blocks and include all the files, but this either includes too many dependencides for other sources, or defeats the whole purpose in the first place -- depending on how you do it)

Upvotes: 2

Views: 2653

Answers (2)

sakra
sakra

Reputation: 65981

You can add an explicit dependency to a source file by setting the OBJECT_DEPENDS property:

set_property(SOURCE source.cpp APPEND PROPERTY OBJECT_DEPENDS "somefile.h")

You'll have to do this for any source file that includes your configuration file.

Upvotes: 8

Sebastian Mach
Sebastian Mach

Reputation: 39109

May I suggest to make the header file generic instead of all the sourcefiles? This is also more common than your approach that I never saw in any production code.

Like this:

// meh.hh
#ifndef MEH_HH
#define MEH_HH

#ifdef THIS
# include <this>
#elif defined(THAT)
# include <that>
#else
# error meh
#endif 

#endif // MEH_HH

// main.cc
#include "meh.hh"

int main () {...}

Upvotes: 0

Related Questions