添加以文件名作为目标的自定义命令

时间:2011-03-11 21:13:56

标签: cmake

我想用输出文件做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中的目标名称则为binhello.bin。有没有办法让hello.bin本身成为目标 在生成的makefile中?

我试过的一些解决方案不起作用:

  • 更改为:add_custom_target(hello.bin ALL DEPENDS hello.bin)会在makefile中产生循环依赖。

1 个答案:

答案 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)