1. 程式人生 > >GNU make專案管理學習筆記

GNU make專案管理學習筆記

P26

[email protected] $% $< $? $^ $+ $*

p33

模式規則中的%百分比符大體上相當於UNIX shell中的星號,它可以代表任意多個字元。

p42

依存檔案:更改標頭檔案時make編譯無法提示更新,可以手動加入目標檔案與C標頭檔案的依存關係但實際的程式依賴關係複雜。所以此時編寫一個Makefile工作目標,此工作目標的動作就是以-M選項對所有原始檔執行gcc,並將結果存入一個依存檔案中,然後重新執行make以便把剛才所產生的依存檔案引入到Makefile,這樣就可以觸發我們所需要的更新動作。如果我們為每個原始檔產生依存關係,將之存入相應的依存檔案,並以該.d檔案為工作目標加入依存規則。這樣當原始檔被改變時,make就會知道需要更新.d檔案。

sed 替換檔案中的字串

p47

將$^替換成$?時,make會將時間戳在工作目標之後的目標檔案傳遞給ar。

P49

如果Makefile已經將程式庫檔案指定為工作目標,它就不能砸必要條件裡對該檔案使用-l選項。執行make會出現錯誤,make不會把-lcounter擴充套件成libcounter去搜索工作目標,make只會搜尋程式庫。所以如果要在Makefile裡進行程式庫的編譯工作,必須使用檔名的語法。

p50

要讓複雜程式的連結工作沒有錯,需要使用一些方法。連結器會以此搜尋命令列上所指的程式庫。所以如果程式庫A包含了一個未定義的符號,如OPEN,而該符號定義在程式庫B中,那麼就必須在連結命令列上於A之前指定B。程式庫的連結順序是相當重要的。

P54

獲得尚未使用的磁碟空間

DF=df

AWK=awk

free-space:=$(DF) . | $(AWK) 'NR == 2 {printf $$4}'

駕馭Makefile https://wenku.baidu.com/view/19505f7c5acfa1c7aa00cc24.html?from=search

p34

對於規則中的每一個命令,make都是在一個新的Shell上執行它的,如果希望多個命令在同一個Shell中執行,則需要用‘;’將這些命令連起來。當命令很長時,為了方便閱讀,我們需要將一行命令分成多行,這需要用‘\’。為了理解,我們可以做一個實驗。現在假設我們需要建立一個test目錄,然後,在這個test目錄下面再建立一個subtest目錄,如果你不知道make是如何執行命令的。