makefile有三個非常有用的自動變數,分別是$@,$^,$<
$@--目標檔案,$^--所有的依賴檔案,$<--第乙個依賴檔案。
還是原來的
objects =main.o add.o sub.otest:$(objects)
gcc -o test $(objects)
main.o:main.c
gcc -c main.c
add.o:add.c add.h
gcc -c add.c
sub.o:sub.c sub.h
gcc -c sub.c
.phony:clean
clean:
rm test $(objects)
第一步使用$@,代表了目標檔案test,第一步這樣替換。
objects =main.o add.o sub.otest:$(objects)
gcc -o $@ $(objects)
main.o:main.c
gcc -c main.c
add.o:add.c add.h
gcc -c add.c
sub.o:sub.h sub.c
gcc -c sub.c
.phony:clean
clean:
rm test $(objects)
第二步,我們開始學著使用@^,$^--所有的依賴檔案
objects =main.o add.o sub.otest:$(objects)
gcc -o $@ $^
main.o:main.c
gcc -c main.c
add.o:add.c add.h
gcc -c add.c
sub.o:sub.h sub.c
gcc -c sub.c
.phony:clean
clean:
rm test $(objects)
第三步,繼續學會使用$<
objects =main.o add.o sub.otest:$(objects)
gcc -o $@ $^main.o:main.c
gcc -c $<
add.o:add.c add.h
gcc -c $<
sub.o:sub.c sub.h
gcc -c $<
.phony:clean
clean:
rm test $(objects)
如果把 add.c 和add.h的先後順序替換,就會報錯,因為$《代表的是第乙個依賴檔案,也就是比如add.o:add.c add.h這裡的第乙個依賴檔案是add.c
你可以試著把clean中的test替換成@$,吧$(objects)替換成@^試試,會發生什麼?
還沒完,還有模式匹配
objects =main.o add.o sub.otest:$(objects)
gcc -o $@ $^main.o: %o:%c
gcc -c $< -o $@
.phony:clean
clean:
rm test $(objects)
參考:
Makefile簡單入門
作為linux或unix下的程式開發人員,大家一定都遇到過makefile,用make命令來編譯自己寫的程式確實是很方便。一般開發情況下,大家都是手工寫乙個簡單makefile。下面先給乙個最簡單的示例 makefile示例 object main.o function.o change objec...
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...
Makefile 入門知識
這篇文章介紹在linux下進行c語言程式設計所需要的基礎知識。在這篇文章當中,我們將會學到以下內容 源程式編譯 makefile的編寫 程式庫的鏈結 程式的除錯 標頭檔案和系統求助 1.源程式的編譯 在linux下面,如果要編譯乙個c語言源程式,我們要使用gnu的gcc編譯器。下面我們以乙個例項來說...