make命令詳解
make 命令是系統管理員和程序員用的最頻繁的命令之一。管理員用它通過命令行來編譯和安裝很多開源的工具,程序員用它來管理他們大型復雜的項目編譯問題。
在執行 make 命令時,有的時候需要加上一下參數選項來保證我們的程序的執行,其實之前已經遇到過 make 在執行命令的時候需要添加上參數選項,比如只打印命令但不執行使用的參數是 "-n" ,還有只執命令不打印命令的參數選項是 "-s",包含其它文件的路徑參數選項是 "-include"等等。
| 參數選項 | 功能 |
|---|---|
| -b,-m | 忽略,提供其他版本 make 的兼容性 |
| -B,--always-make | 強制重建所有的規則目標,不根據規則的依賴描述決定是否重建目標文件。 |
| -C DIR,--directory=DIR | 在讀取 Makefile 之前,進入到目錄 DIR,然后執行 make。當存在多個 "-C" 選項的時候,make 的最終工作目錄是第一個目錄的相對路徑。 |
| -d | make 在執行的過程中打印出所有的調試信息,包括 make 認為那些文件需要重建,那些文件需要比較最后的修改時間、比較的結果,重建目標是用的命令,遺憾規則等等。使用 "-d" 選項我們可以看到 make 構造依賴關系鏈、重建目標過程中的所有的信息。 |
| --debug[=OPTIONS] | make 執行時輸出調試信息,可以使用 "OPTIONS" 控制調試信息的級別。默認是 "OPTIONS=b" ,"OPTIONS" 的可值為以下這些,首字母有效:all、basic、verbose、implicit、jobs、makefile。 |
| -e,--enveronment -overrides |
使用環境變量定義覆蓋 Makefile 中的同名變量定義。 |
| -f=FILE,--file=FILE, --makefile=FILE |
指定文件 "FILE" 為 make 執行的 Makefile 文件 |
| -p,--help | 打印幫助信息。 |
| -i,--ignore-errors | 執行過程中忽略規則命令執行的錯誤。 |
| -I DIR,--include-dir=DIR | 指定包含 Makefile 文件的搜索目錄,在Makefile中出現另一個 "include" 文件時,將在 "DIR" 目錄下搜索。多個 "-i" 指定目錄時,搜索目錄按照指定的順序進行。 |
| -j [JOBS],--jobs[=JOBS] | 可指定同時執行的命令數目,愛沒有 "-j" 的情況下,執行的命令數目將是系統允許的最大可能數目,存在多個 "-j" 目標時,最后一個目標指定的 JOBS 數有效。 |
| -k,--keep-going | 執行命令錯誤時不終止 make 的執行,make 盡最大可能執行所有的命令,直至出現知名的錯誤才終止。 |
| -l load,--load-average=[=LOAD],--max-load[=LOAD] | 告訴 make 在存在其他任務執行的時候,如果系統負荷超過 "LOAD",不在啟動新的任務。如果沒有指定 "LOAD" 的參數 "-l" 選項將取消之前 "-l" 指定的限制。 |
| -n,--just-print,--dry-run | 只打印執行的命令,但是不執行命令。 |
| -o FILE,--old-file=FILE, --assume-old=FILE |
指定 "FILE"文件不需要重建,即使是它的依賴已經過期;同時不重建此依賴文件的任何目標。注意:此參數不會通過變量 "MAKEFLAGS" 傳遞給子目錄進程。 |
| -p,--print-date-base | 命令執行之前,打印出 make 讀取的 Makefile 的所有數據,同時打印出 make 的版本信息。如果只需要打印這些數據信息,可以使用 "make -qp" 命令,查看 make 執行之前預設的規則和變量,可使用命令 "make -p -f /dev/null" |
| -q,-question | 稱為 "詢問模式" ;不運行任何的命令,並且無輸出。make 只返回一個查詢狀態。返回狀態 0 表示沒有目標表示重建,返回狀態 1 表示存在需要重建的目標,返回狀態 2 表示有錯誤發生。 |
| -r,--no-builtin-rules | 取消所有的內嵌函數的規則,不過你可以在 Makefile 中使用模式規則來定義規則。同時選項 "-r" 會取消所有后綴規則的隱含后綴列表,同樣我們可以在 Makefile 中使用 ".SUFFIXES",定義我們的后綴名的規則。"-r" 選項不會取消 make 內嵌的隱含變量。 |
| -R,--no-builtin-variabes | 取消 make 內嵌的隱含變量,不過我們可以在 Makefile 中明確定義某些變量。注意:"-R" 和 "-r" 選項同時打開,因為沒有了隱含變量,所以隱含規則將失去意義。 |
| -s,--silent,--quiet | 取消命令執行過程中的打印。 |
| -S,--no-keep-going, --stop |
取消 "-k" 的選項在遞歸的 make 過程中子 make 通過 "MAKEFLAGS" 變量繼承了上層的命令行選項那個。我們可以在子 make 中使用“-S”選項取消上層傳遞的 "-k" 選項,或者取消系統環境變量 "MAKEFLAGS" 中 "-k"選項。 |
| -t,--touch | 和 Linux 的 touch 命令實現功能相同,更新所有的目標文件的時間戳到當前系統時間。防止 make 對所有過時目標文件的重建。 |
| -v,version | 查看make的版本信息。 |
| -w,--print-directory | 在 make 進入一個子目錄讀取 Makefile 之前打印工作目錄,這個選項可以幫助我們調試 Makefile,跟蹤定位錯誤。使用 "-C" 選項時默認打開這個選項。 |
| --no-print-directory | 取消 "-w" 選項。可以是 用在遞歸的 make 調用的過程中 ,取消 "-C" 參數的默認打開 "-w" 的功能。 |
| -W FILE,--what-if=FILE, --new-file=FILE, --assume-file=FILE |
設定文件 "FILE" 的時間戳為當前的時間,但不更改文件實際的最后修改時間。此選項主要是為了實現對所有依賴於文件 "FILE" 的目標的強制重建。 |
| --warn-undefined-variables | 在發現 Makefile 中存在沒有定義的變量進行引用時給出告警信息。此功能可以幫助我們在調試一個存在多級嵌套變量引用的復雜 Makefile。但是建議在書寫的時候盡量避免超過三級以上的變量嵌套引用。 |
