I have something like this in my project:
add_custom_command(OUTPUT somefile)
add_custom_target(tgt ALL DEPENDS somefile)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir)
This works OK, but my command is being run during make
because of ALL
keyword in add_custom_target(). What i want is to make CMake to run this command only when make install
is issued, not during build.
If i remove ALL keyword, whole target is not being built by default, so somefile is not produced and make install
fails.
A possible solution is to have the make install
command invoke the make tgt
as a side effect. This can be done by using the CODE
signature of the install command:
add_custom_command(OUTPUT somefile)
add_custom_target(tgt DEPENDS somefile)
install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)")
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir)
The execute_process
invokes cmake to build the target tgt
before somefile
is installed.
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