make命令詳解


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。但是建議在書寫的時候盡量避免超過三級以上的變量嵌套引用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM