Makefile 檔案的編寫

2021-08-19 16:15:47 字數 1820 閱讀 8660

以下內容 參考  

大致規則:

目標(target) ... : 依賴(prerequisites) ...  

命令(command)

......

其中,target也就是乙個目標檔案,可以是object file,也可以是執行檔案。prerequisites就是,要生成那個target所需要的檔案或是目標。command也就是make需要執行的命令。

下面舉幾個韋老師書上的例子:

對於 arm-linux-gcc arm-linux-ld arm-linux-objcopy arm-linux-objdump的用法 可以參考

led 的例子:

led.bin : led.c led.s

arm-linux-gcc -c -o ledc.o led.c   ( -c 只編譯,不連線)

arm-linux-gcc -c -o leds.o led.s

arm-linux-ld -ttext 0x00000000 ledc.o leds.o -o led_elf

arm-linux-objcopy -o binary -s led_elf led.bin

clean:

rm -f led.bin led_elf *.o

( arm-linux-objcopy 被用來複製乙個目標檔案的內容到另乙個檔案中.此選項可以進行格式的轉換;

在實際程式設計的,用的最多的就是,將elf格式的可執行檔案轉換為二進位制檔案.

如:   arm-linux-objcopy –o binary –s elf_file bin_file,其中 -o 後面加 輸出的格式;

-s 表示不從原始檔中複製重定位資訊和符號資訊到目標檔案中  )

sdram 的例子:

sdram.bin : led.c sdram.s

arm-linux-gcc -c -o ledc.o led.c

arm-linux-gcc -c -o sdram.o sdram.s

arm-linux-ld -ttext 0x30000000 ledc.o sdram.o -o sdram_elf

arm-linux-objcopy -0 binary -s sdram_elf sdram.bin

clean :

rm -f sdram.bin sdram.elf *.o

mmu 的例子

objs := head.o init.o leds.o( makefile檔案裡的賦值方法有兩種:延時變數、立即變數,前者在真正使用時變數的值才確實,後者在定義時就已經確定了;使用"=" "?=" "define"定義是延時變數,使用":="定義的變數是立即變數,這裡定義objs 是立即變數 )

mmu.bin :$(objs)   (這裡相當於 mmu.bin : head.o init.o leds.o

)arm-linux-ld -tmmu.lds -o mmu_linux $^  ($@ 表示規則的目標檔名; $^表示所有依賴的名字;$< 表示第乙個依賴的檔名) 

arm-linux-objcopy -o binary -s mmu_linux $@

arm-linux-objdump -d -m arm mmu_linux > mmu.dis (這裡參考目的是將反匯程式設計序寫到mmu.dis檔案中去,不從終端輸出

)%.o:%.c

arm-linux-gcc -wall -o2 -c -o $@ $<

%.o:%.s

arm-linux-gcc -wall -o2 -c -o $@ $<

clean :

rm -f mmu.bin mmu_linux mmu.dis *.o       

makefile檔案編寫

hello.c include include function.h int main function.c includeint fun1 int fun2 int fun3 function.h ifndef fun h define fun h int fun1 void int fun2 v...

Makefile檔案編寫

1 基本大全教程 2 四個賦值的區別 是最基本的賦值 是覆蓋之前的值 是如果沒有被賦值過就賦予等號後面的值 是新增等號後面的值其中 和 的區別是 立馬賦值,是整個makefile檔案讀取完後賦值。1 make會將整個makefile展開後,再決定變數的值。也就是說,變數的值將會是整個makefile...

Makefile檔案編寫

main3.c 1 include 2 include static lib.h 3 include fun.h 4 5int main void static lib.h和 1 extern int add int a,int b 2 extern int sub int a,int b 3 ex...