all:
gcc servo.c -o servo
clean:
rm -rf servo servo.o
main:main.o
gcc main.o -o main
main.o:main.c
gcc -c main.c
clean:
rm -rf main.o main
$* 不包括字尾名的當前依賴檔案的名稱
$+ 所有的依賴檔案,以空格分開,並以出現的先後為序,可能包含重複的依賴檔案
$$? 所有時間戳比目標檔案晚的依賴檔案,並以空格分開
$@ 目標檔案的完整名稱
$^ 所有不重複的目標依賴檔案,以空格分開
-: 告訴make命令忽略所有的錯誤
@: 告訴make在執行命令前不要將改命令顯示在標準輸出上
cc = gcc #宣告編譯器
cflags = -g -o -wall #宣告編譯的選項
obj := add.o sub.o main.o #宣告依賴的檔案
topdir := $(pwd) #宣告頂級目錄
objdir := $(topdir)/obj #定義編譯中間檔案的存放的目錄
bindir := $(topdir)/bin #定義可執行檔案的存放目錄
bin := main #定義可執行檔案的名稱
subdir := add sub main obj #宣告所有的子目錄
objhead := $(topdir)/add/add.h $(topdir)/sub/sub.h #宣告所有的標頭檔案
objlink := --std=c99 #宣告編譯時候需要的鏈結護著其他的選項
export cc topdir objdir bindir bin objlink obj #到處所有的全域性變數,給次級目錄中的makefile只用
all:checkdir $(subdir)
mkdir -p $(subdir) $(bindir)
對於makedir中的的選項:
-m 對新建目錄設定訪問許可權。也可以用chmod命令設定。
-p 可以是乙個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動建立好那些尚不存在的目錄, 即一次可以建立多個目錄。
make -c $@
當make的目標為all時,
-c $@ 指明跳轉到次級目錄下讀取那裡的makefile;
m=$(pwd) 表明讀取完makefile(次級目錄下makefile)執行完成後返回到當前目錄繼續讀入、執行當前的makefile( 頂級目錄下makefile)。
clean:
關於clean的規則,在make clean的時候,並不產生目標檔案,且沒有依賴檔案,所以命令都會執行,但如果目錄中存在名為「clean」的檔案或者目錄,則規則沒有依賴檔案,且clean始終是最新的,所以命令不會被執行,為了避免這個問題,可以使用.phony來指明改目標,則將上述的clean部分修改為:
gcc -dlinux -icommon/common common/common/*.cpp *.cpp -lpthread -ldl -fpic-lpthread -ldl -fpic
後續補充,,,,,,,
iptables 語法舉例
iptables 語法 iptables t table command match target iptables i forward d www.com 或211.168.128.26 j drop 禁止某一客戶機或某一網段上網 iptables i forward s 192.169.0.10...
makefile語法 Makefile的語法
假如乙個目標檔案所依賴的依賴檔案很多,我們豈不是要寫很多規則?這顯然不合乎常理。我們可以使用萬用字元解決這些問題。我們對上節程式進行修改 如下 test a.o b.o gcc o test o c gcc c o o 表示所用的.o檔案 c 表示所有的.c檔案 表示目標 表示所有依賴檔案 在該目錄...
makefile入門舉例(簡單寫)
1.首先準備所需的target和files 按照makefile的基本格式,如下圖所示.makefiles in linux an overview target為calculate。files為main.c,add.c divide.c minus,multiply.c math.c 分別如下 m...