雜說1 —— make、Makefile
????對于小項目來說,使用make(借個詞“自動化”)足夠了
????只要用到最基本的規(guī)則就夠了,配合一點通配和內置函數(shù)使使用更靈活

make -j 問題
????make -jN 可以多線程編譯,比其它系統(tǒng)慢就慢吧,小項目也就十幾秒幾十秒的時間,又何必在意。
????上面的寫法,使用make -jN會有個提示
make[1]: warning: jobserver unavailable: using -j1.? Add '+' to parent make rule.
????搜索到https://qa.1r1g.com/sf/ask/4249190851/,底下的回答說明了
(看著應該是機翻)
GNU make 手冊對這個錯誤有很好的解釋。關鍵是:'make' 不會將有關 jobserver 的信息傳遞給被調用的進程,除非確定被調用的進程也是 'make'。
'警告:作業(yè)服務器不可用:使用 -j1。將“+”添加到父生成規(guī)則。
為了使進程進行通信,父進程將信息傳遞給子進程。因為如果子進程實際上不是一個 make,這可能會導致問題,所以父進程只有在它認為子進程是一個 make 時才會這樣做。父級使用普通算法來確定這一點(請參閱MAKE 變量的工作原理)。如果 makefile 的構造使得父進程不知道子進程是一個 make 進程,那么子進程將只收到部分必要的信息。在這種情況下,子進程將生成此警告消息并按順序進行構建。
錯誤描述中引用的 MAKE 變量如何工作部分指定了兩種告訴 'make' 調用的進程是 'make' 的另一個實例的方法:使用$(MAKE)
或+
。它指出:
$(MAKE)
在配方中調用“make”時應該使用變量。遞歸 make 命令應始終使用變量 MAKE,而不是顯式命令名稱“make”,如下所示:
subsystem: ? ? ? ?cd subdir && $(MAKE)
在配方中調用“make”的行之前使用
$(MAKE)
和放置 a+
具有相同的效果。使用 MAKE 變量與在配方行的開頭使用“+”字符具有相同的效果。
只有當您明確輸入
MAKE
配方時,魔法才會發(fā)生。如果不是這種情況,請使用+
.僅當 MAKE 變量直接出現(xiàn)在配方中時才啟用此特殊功能:如果 MAKE 變量是通過擴展另一個變量引用的,則它不適用。在后一種情況下,您必須使用“+”標記來獲得這些特殊效果。
所以要改一改自己的習慣了,編寫時使用$(MAKE)替代make