2017-04-11 56 views
0

我需要一些目錄過濾的* .h和* .cpp文件是什麼,然後使用一些腳本格式,所以我寫了下面的代碼:CMake的add_custom_command無輸出

add_custom_command(

    DEPENDS ${GENERATED_STUFF} 

    COMMAND find "${OUTPUT_DIR}/include/SOME_PATH" -iname *.h -o -iname *.cpp | xargs /net/binlib/lib/clang/clang-format-3.9.0 -i 

    OUTPUT ????? 
) 

但是,該命令只是修改現有的文件,所以不會生成新的文件輸出。在這種情況下,我怎樣才能定義輸出?有沒有其他方法可以解決這個問題?我只希望這個命令只在文件改變時才能被重新執行。

+1

您是否希望這些操作在每次構建**時執行?如果是這樣,請改用'add_custom_target'。如果您希望這些操作僅在* DEPENDS *下的**文件發生**更改**時執行**,則需要創建「時間戳」文件 - 任何非空文件,該時間戳可以與依賴項的時間戳進行比較。 – Tsyvarev

+0

我只希望這些動作只在文件改變時執行。你能提供更詳細的解決方案嗎?我對CMake很陌生。謝謝! – idailylife

回答

1

您可以創建「時間戳」文件。它將被構建系統僅用於提取時間戳,並將其與之間的文件進行比較,取決於

add_custom_command(
    DEPENDS ${GENERATED_STUFF} 
    COMMAND find "${OUTPUT_DIR}/include/exchange_protocol" -iname *.h -o -iname *.cpp | xargs /net/binlib/lib/clang/clang-format-3.9.0 -i 
    COMMAND ${CMAKE_COMMAND} -E touch my_file.stamp 
    OUTPUT my_file.stamp 
) 

爲了讓您的add_custom_command工作,你需要使用add_custom_target取決於指定的文件。

+0

更好地使用'cmake -E touch'而不是'echo'。 – arrowd

+0

當寫回答時,我考慮了* empty *文件(由'touch'創建)的可能問題。其實空虛不應該是一個問題,所以你的建議是好的。我剛剛用'$ {CMAKE_COMMAND}'替換了'cmake'。謝謝! – Tsyvarev

相關問題