在命令列打入 make 時作了以下假設 : (不加任何參數)
當 make 在上述情況下, make 會自動建造找到的第一個工作目標. 要更新一個不同的工作目標 (或多個工作目標), 請在命令列指定工作目標名稱 :
當 make 執行時, 它將會讀取描述擋以及找到所要更新的工作目標. 如果工作目標或其必要條件有任一檔案尚未更新 (或不存在) , 則會 (以一次一個命令的方式) 執行相應規則之命令稿中的 shell 命令. 這些命令執行後, make 會假定工作目標已經完成更新的動作, 於是移到下一個工作目標或結束執行.
如果你所指定的工作目標已經更新 (up to date) , make 除了告訴你此狀況並立即結束執行, 其他什麼事也不做 :
如果你所指的工作目標並未出現在 makefile 檔案中, 也不存在與之對應之內定規則, make 會作出以下反應 :
make 提供了許多命令選項, 其中最有用的一項是 --just-print (或 -n), 用來要求 make 顯示它將為特定工作目標執行命令, 但不要實際執行它們. 當你在撰寫 makefile 時, 這個功能特別有用.
Makefile 的基本與法 :
對 make 有了基本認識後, 現在你可以撰寫自己的 makefile 了. 這裡將介紹 makefile 的基本語法與結構, 讓你熟悉如何寫自己的 makefile.
makefile 檔案一般採用 "由上而下" (top-down) 的結構, 所以預定會更新最上層的工作目標 (通常叫做 all). 下層工作目標用來讓上層工作目標保持在最新的狀態, 比如用來刪除無用之臨時檔案的 clean 工作目標, 應該放在最下層. 正如你預期, 工作目標不一定非得使用檔案名稱不可, 你可以使用任何名稱. 在範例 (如何建立一個簡單的makefile) 可以看到簡化的規則, 下面是較完整的規則 (可能還不構完整 ==") :
- target1 target2 target3 : prerequisite1 prerequisite2
- ^Icommand1
- ^Icommand2
- ^Icommand3
- ...
每道命令必須以跳格字符 (tag 鍵) 開頭. 這個語法用來要求 make 將跟在跳格後的內容傳給 subshell 執行. 如果你不經意在非命令列的第一個字符插入了一個跳格, 則可能會出現非預期錯誤. make 會將井字號 (#) 視為註解字符. 從井字號到該列結束之間的文字都會被 make 忽略. 但注意如果列開頭為跳格字符然後再接井字號, 則make 仍然會將之傳給 subshell. 則由各自的shell 來進行解釋.
你可以使用標準的 UNIX 規避字符 (escape character) - 到斜線 (\) 來接續太長的文字列. 到斜線一般用來接續太長的命令, 也可以用來接續必要條件. 到目前為止你已經有能力撰寫簡單的 makefile. 接下來需要學習的還有 make 變數, make 命令 與 變數巨集等.
沒有留言:
張貼留言