makefile語法舉例

2021-10-24 05:55:50 字數 1800 閱讀 7622

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...