Makefile快速入門 實際工程為例

2021-10-07 18:37:50 字數 1933 閱讀 3310

一、簡介:

使用gcc編譯單個檔案比較方便,但是當工程檔案較多時,則需要乙個指令碼工具,來簡化編譯步驟,提高效率,而makefile剛好能解決此類問題。

二、進入正題:

1、makefile格式

target:depends

cmmand

gcc選項說明:

1.-c (小寫c) 編譯、彙編指定的原始檔,但是不進行鏈結 gcc -c

2.-s (大寫s) 編譯指定的原始檔,但是不進行彙編 gcc -s

3.-e (大寫e) 預處理指定的原始檔,不進行編譯 gcc -e

4.-o (小寫o) 將檔案 file2 編譯成可執行檔案 file1 gcc -o file1 file2

5.-i (大寫i) 指定包含的標頭檔案的目錄 gcc -i directory

6.-g (小寫g) 生成除錯資訊 gcc -g

2、簡單使用makefile

objs = main.o init.o start.o

gcc -c -o $@ $^

%.o:%.c

gcc -c -o $@ $<

%.o:%.s

gcc -c -o $@ $<

clean:

rm *

.o

在終端上輸入make命令就可以,編譯上面的檔案,會生成乙個可執行檔案;輸入make clean就可以清除所有的 .o 檔案

3、實際工程中makefile的使用

使用交叉編譯,arm-linux-gcc

objs = start.o main.o init.o

objs +

= lcd/font.o

objs +

= lcd/framebuffer.o

objs +

= lcd/geometry.o

all: $(objs)

arm-linux-ld -t out.lds $^

-o out.elf

arm-linux-objcopy -o binary -s out.elf out.bin

arm-linux-objdump -d out.elf > out.dis

clean:

rm *

.bin *

.o *

.elf *

.dis %

.o :%.c

arm-linux-gcc -march=armv4 -c -o $@ $<

%.o :%.s

arm-linux-gcc -march=armv4 -c -o $@ $<

arm-linux-objcopy -o binary -s out.elf out.bin:通過原始檔out.elf得到乙個二進位制檔案out.bin

arm-linux-objdump -d out.elf > out.dis:通過原始檔out.elf得到乙個反彙編檔案out.dis

arm-linux-gcc -march=armv4 -c -o $@ $<中 -march=armv4 表示以armv4指令進行編譯

%.s(大寫s)是指start.s檔案,cpu啟動之後第乙個執行的檔案,它裡面有異常向量表,**重定位,main函式等等

快速入門makefile

在linux系統中我們通常使用gcc等命令來實現乙個專案的流程,而makefile類似於乙個shell指令碼,通過一系列規則來幫助我們簡化專案的編譯 鏈結等操作。可以實現近乎windows上vc 等編譯器的功能。我們可以像在終端中輸入命令一樣,將命令寫在makefile中。依靠簡單的依賴原則,mak...

開發記錄 Makefile快速入門

這裡簡單說一下makefile的寫法,主要是個人的喜歡寫法,複雜的語法部門沒有加入,只是一些簡單的入門,同時也是我經常使用的。在makefile中也是有一些我們常用的函式的,簡單的比如 主要功能就是增加字首,用法如下 addprefix prefix,names.例子 addprefix src f...

Linux下Makefile快速編寫入門

一 為什麼要編寫makefile 我們自己平常在linux下編譯原始檔時,當然可以使用gcc wall g main.c o main這樣的命令乙個乙個編譯,但是乙個工程中的原始檔不計其數,其按型別 功能 模組分別放在若干個目錄中,我們乙個個編譯是極其花費時間的,也是不可取的。makefile帶來的...