Makefile工程管理语法与使用技巧
??
??使用GNU Make工具來管理程序是每個Linux工程師必須掌握的技能。Make能夠使整個程序的編譯、鏈接只需要一個命令(make)就可以完成。
??
? ? ? ?Make的工作主要依賴于一個叫為Makefile的件。Makefile文件描述了整個程序的編譯,連接等規則。其中包括:工程中的哪些源文件需要編譯以及如何編譯,如何最后產生我們想要得可執行文件。
? ? ?Makefile中最重要的組成部分是“規則”
規則:用于說明如何生成目標文件,規則的格式如下:
targets?:?prerequisites
????command
目標?依賴?命令
特別提供:命令需要使用【TAB】鍵空格
????目標?依賴?命令?
例如:
led.bin: led.o
????arm-linux-ld -Tled.lds -o led.elf led.o
Makefile中把那些只包含命令,沒有任何依
賴的目標稱為”偽目標”(phony targets)
.PHONY : clean\
clean:
????rm -rf ?hello main,o func.o
其中.PHONY ?的作用是將clean生成為偽目標
最終目標:
1.當一個makefile中有多條規則時,如何單獨執行某條
規則?make后面加某一個規則的目標
2.?如果用戶沒有指定執行某一條規則,make會默認
執行makefile中的第1條規則,而這條規則中的目標稱之
為:最終目標
變量:
使用變量前:
app1: app1.o func1.o func2.o
????gcc app1.o func1.o func2.o -o app1
app2: app2.o func1.o func2.o
????gcc app2.o func1.o func2.o -o app2
使用變量后:
obj=func1.o func2.o
app1: app1.o $(obj)
????gcc app1.o $(obj) -o app1
app2: app2.o $(obj)
????gcc app2.o $(obj) -o app2
在makefile中,用戶除了可以自己定義變量外,還可以使用
存在系統已經定義好的默認變量。
1.?$^:代表所有的依賴文件
2,?$@:代表目標
3.?$<:代表第一個依賴文件
使用前:
led.o : led.S
????arm-linux-gcc -g –o led.o -c led.S
使用后
led.o : led.S
????arm-linux-gcc -g -o ?$@ ?-c ?$^
通用規則:
????當一個makefile中有許多類似的規則時,如
何將這些規則合并為一條通用規則?
????
例如:
led.o : led.S
????arm-linux-gcc -g –o led.o -c led.S
key.o : key.S
????arm-linux-gcc -g –o key.o -c key.S
uart.o : uart.S
????arm-linux-gcc -g –o uart.o -c uart.S
上面三個規則中目標和依賴只有后綴不一樣,那么我們可以用%代替前綴
%.o : %.S
????arm-linux-gcc -g –o %.o -c %.S
就代替了上面三個規則,簡單實用.
?為了節省時間,有時候我們需要去掉回顯,在命令前加一個@符號,就可以去掉該命令的回顯功能.例如:
hello: hello.c
????@gcc hello.c –o hello
@:取消回顯?(演示)
????
文件名:
make命令默認在當前目錄下尋找名字為makefile或者Makefile的工程文件,當名字不為這兩者之一時,可以使用如下方法指定:
? ? ? ? ?
???? ? ? ?make?-f?文件名
總結
以上是生活随笔為你收集整理的Makefile工程管理语法与使用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android+字体稍微加粗,的Andr
- 下一篇: matlab 系统 h10,Thinkb