2011-03-11 35 views
7

我想要做一些類似於add_custom_command,輸出文件名爲 的名稱作爲生成的生成文件中的目標。有沒有這樣做的優雅方式 ?添加一個文件名作爲目標的自定義命令

我見過的所有例子(如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。有沒有一種方法可以使生成的makefile中的hello.bin本身成爲目標 ?

一些解決方案,我已經試過了不起作用:

  • 更改爲:add_custom_target(hello.bin ALL DEPENDS hello.bin)結果在Makefile循環依賴。

回答

3

你可以通過生成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) 

問題在於,當您運行乾淨時,hello.bin不會被清理。爲了得到這個工作,請添加:

set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES hello.bin) 
相關問題