以 main.cpp 爲例:html
除了前面的 -E -S -c
之外node
全部的參數可見 Option Summarylinux
windows 下後綴名 .lib (靜態庫), .dll (動態庫)程序員
linux 下後綴名 .a (靜態庫), .so (動態庫)web
只介紹 linux 下的庫文件製做編程
"lib[your_library_name].a" ,中間是靜態庫名字。windows
用 nm 可查看靜態庫內容。bash
"lib[your_library_name].so" ,中間是靜態庫名字。app
靜態庫使用和動態庫是同樣的,可是執行的時候找不到動態庫。svg
解決辦法:
詳細解釋能夠參考 C++靜態庫與動態庫
<target> : <prerequisites> [tab] <commands>
target 目標, prerequisites 條件, commands 命令 。
目標不能省略,條件和命令均可以省略。
目標一般是文件名,代表 make 要構建的對象。目標能夠有多個,中間用空格分開。
爲了防止目標和文件名衝突,產生了僞目標( phony target )
好比:
clean:
rm -r *.o
若是當前路徑下有個叫 clean 的文件,那麼使用 make clean 就沒法生效了。
這時添加僞目標便可解決。
.PHONY : clean
僞目標能夠有多個,中間用空格隔開。
make 沒有指定目標,默認執行第一個。
前置條件一般是一組文件名,之間用空格分隔。它指定了"目標"是否從新構建的判斷標準:只要有一個前置文件不存在,或者有過更新(前置文件的 last-modification 時間戳比目標的時間戳新),"目標"就須要從新構建。
命令( commands )表示如何更新目標文件,由一行或多行的Shell命令組成。它是構建"目標"的具體指令,它的運行結果一般就是生成目標文件。
all : app cc = g++ include = ../Include .PHONY : clean all src = $(wildcard *.cc) obj = $(patsubst %.cc, %.o, $(src)) app : $(obj) $(cc) -o app -I $(include) $(obj) %.o : %.cc $(cc) -c $< -I $(include) -o $@ clean: rm -f *.o rm -f app
這裏的 wildcard 是 makefile 的內置函數,找出全部的 .cc 文件,賦值給變量 src 。
patsubst 函數用於模式匹配的替換,它須要 3 個參數:第一個是一個須要匹配的式樣,第二個表示用什麼來替換它,第三個是一個須要被處理的由空格分隔的字列。
%.o : %.cc 用到了 makefile 的模式匹配
更多能夠參考 8 Functions for Transforming Text
$< 和 $@ 是 makefile 的自動變量:
更多能夠參考 10.5.3 Automatic Variables
all : hello world cc = g++ include = ../Include .PHONY : all clean hello : hello.o $(cc) -o hello -I $(include) hello.o world : world.o $(cc) -o world -I $(include) world.o hello.o : hello.cc $(cc) -c hello.cc -I $(include) world.o : world.cc $(cc) -c world.cc -I $(include) clean : rm -f *.o rm -f hello world
來個更高級點的版本:
.PHONY : all clean cc = g++ include = ../Include src = $(wildcard *.cc) obj = $(patsubst %.cc, %, $(src)) all : $(obj) % : %.cc gcc -o $@ $^ -g clean: rm -rf $(obj)
更詳細可參考 Make 命令教程
學會 makefile 對之後的編程仍是有很大幫助的,能夠大大提升本身編寫代碼的效率。
Linux 環境下的程序員若是不會使用GNU make來構建和管理本身的工程,應該不能算是一個合格的專業程序員,至少不能稱得上是 Unix程序員。
青玉案·版本二 賀鑄 凌波不過橫塘路,但目送,芳塵去。 錦瑟華年誰與度?月橋花院,鎖窗朱戶,只有春知處。 碧雲冉冉蘅(héng)皋(gāo)暮,彩筆新題斷腸句。 試問閒情都幾許?一川菸草,滿城風絮,梅子黃時雨。
青玉案·版本一 賀鑄 凌波不過橫塘路,但目送,芳塵去。 錦瑟華年誰與度?月臺花榭,鎖窗朱戶,只有春知處。 碧雲冉冉蘅皋暮,彩筆新題斷腸句。 試問閒愁都幾許?一川菸草,滿城風絮,梅子黃時雨。