參考文章出處:http://www.ha97.com/961.html
“-b”
“-m” 忽略和其它版本make的相容性。
“-B”
“-always-make” 認為所有的目標都需要更新(重編譯)。
“-C”
“–directory=”
指定讀取makefile的目錄。如果有多個“-C”參數,make的解釋是後面的路徑以前面的作為相對路徑,並以最後的目錄作為被指定目錄。如:“make –C ~hchen/test –C prog”等價於“make –C ~hchen/test/prog”。
“—debug[=]”輸出make的調試資訊。它有幾種不同的層級可供選擇,如果沒有參數,那就是輸出最簡單的調試資訊。下面是的取值:
a —— 也就是all,輸出所有的調試資訊。(會非常的多)
b —— 也就是basic,只輸出簡單的調試資訊。即輸出不需要重編譯的目標。
v —— 也就是verbose,在b選項的層級之上。輸出的資訊包括哪個makefile被解析,不需要被重編譯的依賴檔案(或是依賴目標)等。
i —— 也就是implicit,輸出所以的隱含規則。
j —— 也就是jobs,輸出執行規則中命令的詳細資料,如命令的PID、返回碼等。
m —— 也就是makefile,輸出make讀取makefile,更新makefile,執行makefile的資訊。
“-d” 相當於“–debug=a”。
“-e”
“–environment-overrides” 指明環境變數的值覆蓋makefile中定義的變數的值。
“-f=”
“–file=”“–makefile=”指定需要執行的makefile。
“-h”
“–help” 顯示協助資訊。
“-i”
“–ignore-errors” 在執行時忽略所有的錯誤。
“-I”
“–include-dir=”指定一個被包含makefile的搜尋目標。可以使用多個“-I”參數來指定多個目錄。
“-j []”“–jobs[=]”
指同時運行命令的個數。如果沒有這個參數,make運行命令時能運行多少就運行多少。如果有一個以上的“-j”參數,那麼僅最後一個“-j”才是有效。(注意這個參數在MS-DOS中是無用的)
“-k”
“–keep-going” 出錯也不停止運行。如果產生一個目標失敗了,那麼依賴於其上的目標就不會被執行了。
“-l ”
“–load-average[=]” “—max-load[=]”指定make運行命令的負載。
“-n”
“–just-print” “–dry-run”“–recon”
僅輸出執行過程中的命令序列,但並不執行。
“-o ”
“–old-file=” “–assume-old=”不重建的指定的,即使這個目標的依賴檔案新於它。
“-p”
“–print-data-base”
輸出makefile中的所有資料,包括所有的規則和變數。這個參數會讓一個簡單的makefile都會輸出一堆資訊。如果你只是想輸出資訊而不想執行makefile,你可以使用“make -qp”命令。如果你想查看執行makefile前的預設變數和規則,你可以使用“make –p –f /dev/null”。這個參數輸出的資訊會包含著你的makefile檔案的檔案名稱和行號,所以,用這個參數來調試你的makefile會是很有用的,特別是當你的環境變數很複雜的時候。
“-q”
“–question” 不運行命令,也不輸出。僅僅是檢查所指定的目標是否需要更新。如果是0則說明要更新,如果是2則說明有錯誤發生。
“-r”
“–no-builtin-rules” 禁止make使用任何隱含規則。
“-R”
“–no-builtin-variabes” 禁止make使用任何作用於變數上的隱含規則。
“-s”
“–silent” “–quiet”在命令運行時不輸出命令的輸出。
“-S”
“–no-keep-going” “–stop”取消“-k”選項的作用。因為有些時候,make的選項是從環境變數“MAKEFLAGS”中繼承下來的。所以你可以在命令列中使用這個參數來讓環境變數中的“-k”選項失效。
“-t”
“–touch” 相當於UNIX的touch命令,只是把目標的修改日期變成最新的,也就是阻止產生目標的命令運行。
“-v”
“–version” 輸出make程式的版本、著作權等關於make的資訊。
“-w”
“–print-directory” 輸出運行makefile之前和之後的資訊。這個參數對於跟蹤嵌套式調用make時很有用。
“–no-print-directory”禁止“-w”選項。
“-W ”
“–what-if=” “–new-file=”“–assume-file=”
假定目標需要更新,如果和“-n”選項使用,那麼這個參數會輸出該目標更新時的運行動作。如果沒有“-n”那麼就像運行UNIX的“touch”命令一樣,使得的修改時間為目前時間。
“–warn-undefined-variables”只要make發現有未定義的變數,那麼就輸出警告資訊
上面這麼多些命令,我用過的最多的也就是-C了,其他的接觸的比較少,先轉一個,方便以後查閱。
另外在記錄一下關於Makefile中的.PHONY的說明,以前看到的Makefile裡面大多數都有這個,但是不清楚是幹啥用的,今天查了一下相關的資料,終於大概搞明白了:
這稱之為假象目的(Phony Targets)
假設你的一個項目最後需要產生兩個可執行檔。你的主要目標是產生兩個可執行檔,但這兩個檔案是相互獨立的——如果一個檔案需要重建,並不影響另一個。你可以使用“假象目的”來達到這種效果。一個假象目的跟一個正常的目的幾乎是一樣的,只是這個目的檔案是不存在的。因此,make總是會假設它需要被產生,當把它的依賴檔案更新後,就會執行它的規則裡的命令列。
如果在我們的makefile開始處輸入 all:exec1 exec2 其中exec1和exec2是我們做為目的的兩個可執行檔。make把這個'all'做為它的主要目的,每次執行時都會嘗試把'all'更新。但既然這行規則裡沒有哪個命令來作用在一個叫'all'的實際檔案(事實上all並不會在磁碟上實際產生),所以這個規則並不真的改變'all'的狀態。可既然這個檔案並不存在,所以make會嘗試更新all規則,因此就檢查它的依靠exec1,exec2是否需要更新,如果需要,就把它們更新,從而達到我們的目的。
假象目的也可以用來描述一組非預設的動作。例如,你想把所有由make產生的檔案刪除,你可以在makefile裡設立這樣一個規則:
veryclean:
rm *.o
rm myprog
前提是沒有其它的規則依靠這個'veryclean'目的,它將永遠不會被執行。但是,如果你明確的使用命令'make veryclean',make會把這個目的做為它的主要目標,執行那些rm命令。
如果你的磁碟上存在一個叫veryclean檔案,會發生什麼事?這時因為在這個規則裡沒有任何依靠檔案,所以這個目的檔案一定是最新的了(所有的依靠檔案都已經是最新的了),所以既使使用者明確命令make重新產生它,也不會有任何事情發生。
解決方案是標明所有的假象目的(用.PHONY),這就告訴make不用檢查它們是否存在於磁碟上,也不用尋找任何隱含規則,直接假設指定的目的需要被更新。在makefile裡加入下面這行包含上面規則的規則:.PHONY:veryclean 就可以了。注意,這是一個特殊的make規則,make知道.PHONY是一個特殊目的,當然你可以在它的依靠裡加入你想用的任何假象目的,而make知道它們都是假象目的。