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

我想做一些类似add_custom_command事情,输出文件名称作为生成的makefile中的目标。 有没有这样做的优雅方式?

我见过的所有示例(例如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中产生循环依赖。

  • 你可以通过生成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)
    
    链接地址: http://www.djcxy.com/p/5471.html

    上一篇: adding a custom command with the file name as a target

    下一篇: Implement probability distribution function in Java problem