I'm migrating a makefile project to CMake. The person who wrote the makefile the first time had done a module for writing certain values in an include file.
There's a main config.h file that includes a config_in.h. The config.h file contains something like this:
#ifndef USE_FEATURE_A
#define USE_FEATURE_A 0
#endif
#ifndef USE_FEATURE_B
#define USE_FEATURE_B 0
#endif
In the makefile there's a fake target like with_feature_a
that writes in config_in.h
#define USE_FEATURE_A 1
In this way someone can type
make with_feature_a
make
to get the right build.
I want to replicate something like this using this codebase but using CMake. I tried a couple of approaches suggested on the net, but I didn't get it to work.
set_target_properties(with_feature_a PROPERTIES COMPILE_DEFINITIONS
"WITH_FEATURE_A=1"
)
This isn't working because if I run
make with_feature_a
I don't see with_feature_a
in the preprocessor command line.
The second attempt I made is to write a file directly with the content set to whatever I want, but I didn't understand how to connect the file()
command to my target.
I placed this in my CMakeLists.txt
file(WRITE
local/config_in.h
"#define WITH_FEATURE_A 1"
)
but this isn't executed everytime and I don't know how to set it to a single target.
Any help is appreciated. Thank you for reading all this stuff. Sorry for the long story :)
UPDATE
The solution provided here is a big enhacement on the road to solution. The problem is that is don't allow recursive definitions. I show an example:
in CMakeLists.txt I placed:
if (WITH_FEATURE_A)
MESSAGE(STATUS "WITH_FEATURE_A")
add_definitions(-DUSE_FEATURE_A=1)
add_definitions(-DWITH_FEABURE_B=1)
endif()
if (WITH_FEABURE_B)
MESSAGE(STATUS "WITH_FEATURE_B")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_C)
MESSAGE(STATUS "WITH_FEATURE_C")
add_definitions(-DUSE_FEATURE_D=1)
endif()
if (WITH_FEABURE_D)
MESSAGE(STATUS "WITH_FEATURE_D")
endif()
in this case if I execute cmake with -DWITH_FEATURE_A=1 I'd love to see in the output:
WITH_FEATURE_A
WITH_FEATURE_B
WITH_FEATURE_D
actually this code print just
WITH_FEATURE_A