.c -> .exe
linux 中 編譯器 gcc和g++
預處理 -e
彙編 -s
編譯 -c
鏈結 -o
➜ hello gcc -e hello.c -o hello.i
➜ hello ls
hello.c hello.i
來看一下hello.i的內容
巨集定義在與處理的時候就展開了
➜ hello gcc -s hello.i -o hello.s
➜ hello ls
hello.c hello.i hello.s
產生的彙編**
gcc -c hello.s -o hello.o
gcc hello.o -o hello
目標檔案:依賴檔案
[tab] 指令
第乙個目標檔案是我的最終目標 遞迴
hello:hello.o
gcc hello.o -o hello
hello.o:hello.s
gcc -c hello.s -o hello.o
hello.s:hello.i
gcc -s hello.i -o hello.s
hello.i:hello.c
gcc -e hello.c -o hello.i
➜ hello ls
hello.c makefile
➜ hello make
gcc -e hello.c -o hello.i
gcc -s hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello
➜ hello ls
hello hello.c hello.i hello.o hello.s makefile
偽目標
:phony
clear: # 名稱,可改
=(替換)
+=(追加)
:=(恆等於)常量
tar = test
obj = circle.o cube.o main.o
cc := gcc
$(tar):$(obj)
$(cc) $(obj) -o $(tar)
circle.o:circle.c
$(cc) -c circle.c -o circle.o
cube.o:cube.c
$(cc) -c cube.c -o cube.o
main.o:main.c
$(cc) -c man.c -o main.o
.phony
clearall:
rm -rf $(obj) $(tar)
clear:
rm -rf $(obj)
類似c語言的巨集定義
使用變數$(變數名)
%.c %.o
任意的.c或.o檔案
*.c *.o
所有的.c或.o檔案
tar = test
obj = circle.o cube.o main.o
cc := gcc
$(tar):$(obj)
$(cc) $(obj) -o $(tar)
%.o:%.c
$(cc) -c %.c -o %.o
.phony
clearall:
rm -rf $(obj) $(tar)
clear:
rm -rf $(obj)
需要任何的.o檔案都可以執行對應的.c
$@
所有的目標檔案
$^
所有的依賴檔案
$<
所有的依賴檔案的第乙個檔案
tar = test
obj = circle.o cube.o main.o
cc := gcc
rmrf := rm -rf
$(tar):$(obj)
$(cc) $^ -o $@
%.o:%.c
$(cc) -c $^ -o $@
.phony
clearall:
$(rmrf) $(obj) $(tar)
clear:
$(rmrf) $(obj)
函式呼叫,很像變數的使用,也是以$
來標識的,其語法如下:
()
或是${}
linux makefile檔案分析
cflags wall wstrict prototypes g fomit frame pointer ffreestanding all crt0.s leds.c arm linux gcc cflags c o crt0.o crt0.s arm linux gcc cflags c o l...
Linux Makefile由淺入深剖析
經過長時間學習linux makefile,於是和大家分享一下,看完本文你肯定有不少收穫,希望本文能教會你更多東西。假設我們有乙個程式由5個檔案組成,源 如下 main.c include mytool1.h include mytool2.h int main mytool1.c include ...
linux makefile檔案心得筆記
經過長時間學習linux makefile檔案,我針對乙個簡單的例項進行了對linux makefile檔案的總結 於是和大家分享一下,看完本文你肯定有不少收穫,希望本文能教會你更多東西。sample makefile edit main.o kbd.o command.o display.o 第一...