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