adding a custom command with the file name as a target

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. eg:

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:

  • changing to: 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)
    
    链接地址: http://www.djcxy.com/p/5472.html

    上一篇: 在C#4中使用动态类型访问JavaScript对象的属性

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