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.
add_custom_command adds a callable function that can have defined outputs (using the OUTPUT and BYPRODUCTS arguments). It can also have dependencies that will be run before the function is called.
Adds a target with the given name that executes the given commands. The target has no output file and is always considered out of date even if the commands try to create a file with the name of the target.
You should use add_custom_target
instead and add_dependencies
to make your normal target depend on it:
add_custom_target( myCustomTarget COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_config_h.py ${CMAKE_CURRENT_BINARY_DIR}/config.h ) add_dependencies(myTarget myCustomTarget)
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:
set(PROGRAM1_SOURCES main_program1.cpp) set(PROGRAM1_HEADERS main_program1.h ${CMAKE_CURRENT_BINARY_DIR}/config.h) add_executable(program1 ${PROGRAM1_SOURCES} ${PROGRAM1_HEADERS})
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With