makefile 語法:html
目標文件:生成目標文件的依賴文件shell
生成目標文件所須要執行的動做(必須以tab鍵開頭)優化
經常使用變量表明的意思: $@--目標文件,$^--全部的依賴文件,$<--第一個依賴文件。.net
~--當前用戶目錄,*全部符號的通配符調試
經常使用的查找包含符號:-I 將目標做爲第一個尋找頭文件的目標htm
-L將目標做爲第一個尋找庫文件的目標blog
-l在目標中尋找.so文件,如-lword在指定目錄尋找libworld.so這個動態庫文件編譯
make能夠自動推導文件以及文件依賴關係後面的命令,因而咱們就不必去在每個[.o]文件後都寫上相似的命令,由於,咱們的make會自動識別,並本身推導命令。只要make看到一個[.o]文件,它就會自動的把[.c]文件加在依賴關係中,若是make找到一個whatever.o,那麼whatever.c,就會是whatever.o的依賴文件。而且 cc -c whatever.c 也會被推導出來。因此這樣也是可行的 whatever.o : defs.h,固然這樣會下降makefile的可讀性。模板
僞目標:變量
爲了不和文件重名的這種狀況,咱們可使用一個特殊的標記「.PHONY」來顯示地指明一個目標是「僞目標」,向make說明,無論是否有這個文件,這個目標就是「僞目標」。
只要有這個聲明,無論是否有「clean」文件,要運行「clean」這個目標,只有「make clean」這樣。因而整個過程能夠這樣寫:
.PHONY: clean
clean:
rm *.o temp
命令:
顯示命令:echo 。。。
若是你要讓上一條命令的結果應用在下一條命令時,你應該使用分號分隔這兩條命令。
經常使用的在目標文件夾中包含全部的c文件命令:shell find 路徑 -maxdepth -name "*.c"
判斷目錄是否存在命令:shell if [! -d '/data/'] 若是data目錄不存在,則執行。。。
編譯宏以「define」開始,以「endef」結束
gcc經常使用參數:
-o指定輸出文件名
-O優化編譯、連接
-c只編譯不連接
-g增長gdb調試
-w關閉編譯告警
-W打開編譯告警
-fPIC產生與位置無關的代碼(生成動態庫.SO時候用)
-WI,-Bsymbolic 強制動態庫使用本身的符號
參考連接:https://blog.csdn.net/weixin_38391755/article/details/80380786
小型可參考的makefile模板:https://www.cnblogs.com/prettyshuang/p/5552328.html