一個Makefile的進(jìn)化(一)

一個Makefile的進(jìn)化(一)

隱含規(guī)則、變量與Makefile的顯示

這一篇對開篇的Makefile進(jìn)行修改
涉及Makefile的下面知識

變量
多個依賴
隱含規(guī)則
echo顯示前的@
$@目標(biāo)
涉及文件:

string@asus:~/Projects/makefile$ ls
Makefile  test.c  test_fun1.c

Makefile 文件如下:

OBJ = test.o 
OBJ += test_fun1.o

all:test
    @echo build all

test:$(OBJ)
    gcc $(OBJ) -o $@ 
clean:
    rm -f $(OBJ)
    rm -f test
.PHONY : clean

這次文件依賴增加了一個源文件,來演示多個文件依賴
使用OBJ來替代每一個文件的中間文件
使用隱含規(guī)則生成.o文件

  1. 從Makefile已經(jīng)可以看出來在Makefile中定一個變量是如此簡單,直接變量名=變量值即可
  2. 變量可以進(jìn)行+=操作,在使用的時候會展開為test.o test_fun1.o,
  3. 在Makefile中test依賴 test.o test_fun1.o,但是這兩個目標(biāo)并沒有生成規(guī)則,系統(tǒng)是如何生成這兩個文件呢,原來Makefile內(nèi)建了很多隱含規(guī)則,在隱含規(guī)則中生成這兩個目標(biāo)的規(guī)則是:cc -c -o *.o *.c,所以會看到執(zhí)行make后有下面的結(jié)果,至于要怎么樣修改隱含規(guī)則,在后面的文章會講到
  4. 在 all目標(biāo)中有執(zhí)行這語句 @echo build all,表示編譯完成后進(jìn)行顯示信息,可以進(jìn)行各種信息的顯示,這里只做演示,echo前面的@表示不顯示語句本身,如果沒有@會多余的顯示一行 echo build all,這個在實(shí)際的Makefile中經(jīng)常使用,用于關(guān)閉打開make時候的信息
test:$(OBJ)
    gcc $(OBJ) -o  $$@ 
這個規(guī)則中$@是一個內(nèi)建變量,特指在該語句中目標(biāo),在示例中表示test

執(zhí)行make后如下結(jié)果

string@asus:~/Projects/makefile$ make
cc    -c -o test.o test.c
cc    -c -o test_fun1.o test_fun1.c
gcc test.o  test_fun1.o -o test 
build all
string@asus:~/Projects/makefile$ make clean 
rm -f test.o  test_fun1.o
rm -f test
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容