Make的工作主要依賴於一個叫Makefile的文件。Makefile文件描述了整個程序的編譯、鏈接等規則。
1、Makefile格式
targets : prerequisites
command
targets:目標
prerequisites:依賴
command:命令,命令需要使用[TAB]鍵空格
例:
led.elf : led.o
arm-linux-ld -Tled.lds -o led.elf led.o
2、Makefile構成-偽目標
Makefile把那些只包含命令,沒有任何依賴的目標稱為“偽目標”.
.PHONY : clean clean : rm -f hello main.o func.o
3、 Makefile構成-最終目標
- Make led.o //在Makefile查找目標為led.o的規則並執行。
- Make //默認執行第一條規則,第一條規則的依賴文件找不到的話,自動執行目標文件為第一條規則的依賴文件的規則。
- 用戶自定義的變量
4、Makefile構成-自定義變量
使用變量前:
app1: app1.o func1.o func2.o -o app1 gcc app1.o func1.o func2.o -o app1 app2: app2.o func1.o func2.o -o app2 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
5、系統定義好的變量
$^:代表所有的依賴文件
$@:代表目標
$<:代表第一個依賴文件
使用前:
led.o : led.S arm-linux-gcc -g -o led.o -c led.S
使用后:
led.o : led.S arm-linux-gcc -g -o $@ -c $^
6、Makefile構成-通配符
%.o //表示所有以.o結尾的文件
%.c //表示所有以.c結尾的文件
%.s //表示所有以.s結尾的文件
……
1.1.6. Makefile使用技巧
- 注釋:“#注釋內容”
- 去回顯:命令前加“@”
1.1. 鏈接器腳本
SECTION{ . = 0x30000000 # .是指當前地址,在此處設置起始鏈接地址為0x30000000 . = ALING(4); #設置4字節對齊 .text: #代碼段 { start.o(.text) #代碼段0地址執行的程序名 *(.text) } . = ALING(4) #設置4字節對齊 .data: #數據段 { *(.data) } . = ALING(4) #設置4字節對齊 bss_start = .; #定義變量=當前位置地址 .bss: #BSS段 { *(.bss) } bss_end = .; 定義變量=當前位置地址 }