我希望觸發命令輸出更改時發生的CMake配置;具體而言,我正在考慮在配置CMake時從git describe --always --dirty
的輸出發生變化時嘗試進行CMake配置。如何在命令輸出更改時觸發CMake
大多數這個問題可以通過觀看HEAD
文件和解決symref裏面refs/heads/[branch]
和連接這些與configure_file(...)
然而,這並不當樹是在異常狀態下(即當有未提交上撿起來解決修改)。在這種情況下,git describe --always --dirty
會將-dirty
後綴附加到輸出。
當發生這種情況時,沒有對git文件的更改,只有git已經注意到存儲狀態的差異,所以我不能在這裏的任何文件上使用configure_file(...)
來讓cmake注意到更改並重新配置。
所以我正在尋找是否有辦法讓cmake運行git命令注意輸出差異並觸發重新配置,幾乎需要類似於預重新配置檢查階段的東西。
不確定這是否可能,如果任何人有任何想法如何可以實現這種行爲?
不要做這種在CMake的本身的東西,因爲這會給你那種一個「雞和蛋」的問題(檢查當文件沒有改變時更改文件)。把它移動到一些調用你的git的shell腳本包裝器,配置和構建步驟。 – Florian
所以我正在尋找這樣做的原因是我可以編譯'git describe'字符串到版本信息中,以確保我確切地知道從哪個git提交它是從_critically_構建的,如果該提交有修改。 我不希望在它上面有一個元構建系統,只是爲了獲得這一小塊功能,如果我能避免它,我不明白爲什麼它應該在雞和雞蛋的情況下結束? – rblk
我不知道如何強制CMake在構建期間重新運行配置。但是,如果您只想更改* version.h *並重新創建與之相關的所有內容,則可以在** build **階段使用'add_custom_target(BuildVersion COMMAND $ {CMAKE_EXECUTABLE} -P)'生成該文件。這在腳本模式下運行CMake,您可以使用通常的'configure_file'命令。進一步'add_dependencies( BuildVersion)'命令將得到保證,如果腳本更改* version.h *文件,則可執行文件將被重建。 –
Tsyvarev