1. 程式人生 > >LinuxC下Makefile規則執行順序

LinuxC下Makefile規則執行順序

目前我會用一些簡單的make

.pc的預編譯

.c .cpp的編譯

.o 的連結

個人理解,只有一棵樹,結點後面是執行順序編號

Makefile
由整個make檔案。找到第一個規則以及該規則的第一個目標檔名(root)
然後擴充套件規則,編譯和連結按照先序遍歷執行命令cmd

 
        

		     
//*********************************************
規則的語法
//----------英文-------------------------------
targets : prerequisites
	command
	...
---------或------------------------------------
targets : prerequisites ; command
	command
	...
//targets是檔名,以空格分開,可以使用萬用字元。一個檔案,但也有可能是多個檔案。
//command是命令列,如果其不與“target:prerequisites”在一行,那麼,必須以[Tab鍵]開頭,如果和prerequisites在一行

,那麼可以用分號';'做為分隔。
//prerequisites也就是目標所依賴的檔案(或依賴目標)。如果其中的某個檔案要比目標檔案要新,那麼,目標就被認為是“

過時的”,被認為是需要重生成的。
//----------中文-------------------------------
<目標檔名> *[" "目標檔名] ":" *[依賴檔名]
"	"[命令]
	...
---------或------------------------------------
<目標檔名> *[" "目標檔名] ":" *[依賴檔名] *[";"命令]
"	"[命令]
"	"...
//--- ABNF
//<>   固定位置必須一個
//[]   存在一個或零個
//*[]  存在零個或若干個
//" "  必須有引號內的字元或字串(英文模式下).eg " "空格分割; ":"冒號分割;...
//"	" tab鍵頂格開始
//=    右邊替換左邊
//*********************************************
靜態模式(多目標的規則)
//----------英文-------------------------------
<targets...>: <target-pattern>: <prereq-patterns ...>
	<commands>
	...
//----------中文-------------------------------
[目標檔名集合 ":" ]<目標檔案匹配模式> ":" *[依賴檔名] *[";"命令]
"	"[命令]
	...
//--- ABNF
//目標檔名集合=<目標檔名> *[" "目標檔名]