I have a custom command
add_custom_command(
OUTPUT config.h
PRE_BUILD
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h
)
I'm trying to run it before everything else and I generate unix Makefiles.
However PRE_BUILD is only supported for VS2010 which means that config.h
is build before linking.
how do I make a custom command before cmake starts compiling sources.
You should use
add_custom_target
instead andadd_dependencies
to make your normal target depend on it:This should ensure that the command is run before compiling the sources of
myTarget
.Usualy build systems which are based on makefiles do not need to mention headers as part of a target. Further more, adding headers to target is considered to be an antipattern. But generating a header is an exception from this rule.
http://voices.canonical.com/jussi.pakkanen/2013/03/26/a-list-of-common-cmake-antipatterns/
You should set your
${CMAKE_CURRENT_BINARY_DIR}/config.h
as part of some other compilled target. For example:So that, CMake will know which target actually needs the generated
config.h
and will be able to insert the generation commands into a right build steps.Also, see an example at https://cmake.org/cmake-tutorial/#s5