我想用输出文件做add_custom_command
之类的事情
name作为生成的makefile中的目标。是否有一种优雅的方式
这样做?
我见过的所有示例(例如the CMake FAQ re: latex)都使用add_custom_command
来说明如何生成所需的输出文件,然后add_custom_target
来创建目标。例如。:
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)
但是,生成的makefile中的目标名称则为bin
比hello.bin
。有没有办法让hello.bin
本身成为目标
在生成的makefile中?
我试过的一些解决方案不起作用:
add_custom_target(hello.bin ALL DEPENDS hello.bin)
会在makefile中产生循环依赖。答案 0 :(得分:4)
您可以通过生成hello.bin作为目标的副作用来实现。不要从objcopy生成hello.bin,而是生成hello.tmp。然后作为副作用,您还将hello.tmp复制到hello.bin。最后,创建依赖于hello.tmp的假目标hello.bin。在代码中:
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)
问题在于,当您运行clean时,不会清除hello.bin。为了实现这一目标,请添加:
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin)