一、簡介:
使用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帶來的...