我正在使用GNU Make 3.81構建給定的C項目。 GNU的正常行爲是檢查,如果目標存在,並且任何先決條件比目標更新,則執行目標命令。GNU Make構建過時且比特定時間戳更新的文件
如果先決條件比目標更新且比給定時間戳更新,是否可以重建目標?比方說,只有在文件比2011年10月2日更新的情況下才會生成。
我正在使用GNU Make 3.81構建給定的C項目。 GNU的正常行爲是檢查,如果目標存在,並且任何先決條件比目標更新,則執行目標命令。GNU Make構建過時且比特定時間戳更新的文件
如果先決條件比目標更新且比給定時間戳更新,是否可以重建目標?比方說,只有在文件比2011年10月2日更新的情況下才會生成。
有沒有辦法直接用make做到這一點,但你可以在該規則的行動外殼做:
target: prereq
touch --date='Oct 2, 2011' .timestamp
if [ $< -nt .timestamp ]; then \
command to rebuild target; \
fi
注意使用\
使if
命令一個命令。您也可以使用else
來處理目標已過期並且prereq也很舊的情況。
make
將重新使出現不到任何其先決條件的所有目標,所以你和 condititon將難以實現。
如果你想在編譯目錄中引入一個時代,你可以簡單地將所有文件的修改時間戳設置爲touch -d
。不是一個漂亮,而是一個工作解決方案。