I'd like to do something like add_custom_command
, with the output file
name as a target in the generated makefile. Is there an elegant way of
doing this?
All the examples I've seen (such as the CMake FAQ re: latex) use add_custom_command
to tell how to generate the desired output file, and then add_custom_target
to create a target. For example.:
add_executable (hello hello.c)
add_custom_command(OUTPUT hello.bin
COMMAND objcopy --output-format=binary hello hello.bin
DEPENDS hello
COMMENT "objcopying hello to hello.bin")
add_custom_target(bin ALL DEPENDS hello.bin)
However, the target name in the generated makefile is then bin
rather
than hello.bin
. Is there a way to make hello.bin
itself a target
in the generated makefile?
Some solutions I've tried that don't work:
add_custom_target(hello.bin ALL DEPENDS hello.bin)
results in a circular dependency in the makefile.You could do it by generating your hello.bin as a side effect of a target. Instead of generating hello.bin from objcopy, you generate hello.tmp. Then as a side effect you also copy hello.tmp to hello.bin. Finally, you create the phony target hello.bin that depends on your hello.tmp. In code:
add_executable (hello hello.c)
add_custom_command(OUTPUT hello.tmp
COMMAND objcopy --output-format=binary hello hello.tmp
COMMAND ${CMAKE_COMMAND} -E copy hello.tmp hello.bin
DEPENDS hello
COMMENT "objcopying hello to hello.bin")
add_custom_target(hello.bin ALL DEPENDS hello.tmp)
The problem with that is that hello.bin is not cleaned when you run clean. To get that working, add:
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin)
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