2012-02-22 34 views
4

我正在使用GNU Make 3.81構建給定的C項目。 GNU的正常行爲是檢查,如果目標存在,並且任何先決條件比目標更新,則執行目標命令。GNU Make構建過時且比特定時間戳更新的文件

如果先決條件比目標更新且比給定時間戳更新,是否可以重建目標?比方說,只有在文件比2011年10月2日更新的情況下才會生成。

回答

2

有沒有辦法直接用make做到這一點,但你可以在該規則的行動外殼做:

target: prereq 
     touch --date='Oct 2, 2011' .timestamp 
     if [ $< -nt .timestamp ]; then   \ 
      command to rebuild target;  \ 
     fi 

注意使用\使if命令一個命令。您也可以使用else來處理目標已過期並且prereq也很舊的情況。

0

make將重新使出現不到任何其先決條件的所有目標,所以你 condititon將難以實現。

如果你想在編譯目錄中引入一個時代,你可以簡單地將所有文件的修改時間戳設置爲touch -d。不是一個漂亮,而是一個工作解決方案。