2013-07-17 69 views
1

我想在CMake的東西,將被執行每當我進入使cmake的add_custom_command建立

add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc 
    PRE_BUILD 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_build_date.py 
      ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc 
) 
add_custom_target(build-date-xxx 
        ALL 
        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc) 

這就是目前我在做什麼。不幸的是make build-date-xxx只會生成一次文件。

即使沒有add_custom_target聲明該文件只生成一次。

的結果應該是這樣的GNU讓

.PHONY all: 
    echo "hallo welt" 
all: foo.c bar.c 
%.c: 
    touch [email protected] 

在生成文件每當進入化妝。因爲全部是第一個目標,所以它總是被調用,並且自定義命令echo "hallo welt"被實際執行。

+0

密切相關,但執行得太晚:http://stackoverflow.com/questions/13920072/cmake-always-run-command-regardless-of-any - 依賴 – Alex

回答

1

嘗試使用ADD_CUSTOM_TARGET並在其中使用參數ALL。 然後讓你的主要目標依賴於這個自定義目標。

+0

實際上,這正是我所看到的cmake中的第二個命令。它一旦運行cmake就會生成文件。但並不是每次製作都運行。 – Alex

0

反向您的訂單...有一個自定義的目標不依賴(無DEPENDS)生成的文件,並添加依賴於這一目標的自定義命令,提到它OUTPUT s文件,並沒有按」實際上做任何事情(例如COMMAND ${CMAKE_COMMAND} -E echo)。然後在某處提到輸出文件(大概是將它作爲庫或可執行文件的來源)。 (您也可以使用ALL作爲自定義目標,但我假定某些代碼對象實際上使用輸出文件,所以您希望所述代碼對象依賴於輸出文件。)

理想情況下,您可以想要避免修改文件,除非實際發生了變化,否則你將無法獲得無操作版本。 (如何做到這一點是留給讀者的練習。)

相關問題