除非最簡單的專案,任何乙個商業專案都會包含多個源**,而且在編譯的時候會有很長很複雜的指令,為了編譯的簡單可行,makefile由此而生,在編譯時候直接輸入make便會按照makefile裡面的規則編譯源**。android的源**就是通過makefile管理的。
make通過makefile得到編譯規則,從而編譯原始檔
makefile是以乙個文字形式的指令碼告訴make編譯器如何以及怎麼編譯源**,裡面包含了編譯規則
makefile規則遵循以下通用格式
target:dependency [dependency[···]
]command
command
[···]
每個command第乙個字元必須是tab鍵,而不是空格鍵,不然make會報錯並停止
start:
gcc -o test test.c
start:test.o
gcc -o test test.o
test.o:
gcc -o test.o -c test.c
說明:target start
後面的test.o
代表其下的command
依賴與test.o
這個target
。所以make
先執行了test.o
這個target
下的command
,如果存在test.o
,那麼makefile會去檢視.c
檔案的修改時間,再決定編不編譯.c
檔案
start:test.o
gcc -o test test.o
test.o:
gcc -o test.o -c test.c
clean:
rm -f test.o
說明:增加clean
標籤,其後面的指令會在輸入make clean
時候執行
start:test.o
gcc -o test test.o
@echo '----------ok----------'
test.o:
gcc -o test.o -c test.c
clean:
rm -f test.o
varname=some_text
把變數用括號括起來,前面加$
就可以引用該變數的值
$(varname)
按照慣例makefile的變數都是大寫(只是習慣而已,不是必須的)
cc=gcc
srcs=test.c
objs=test.o
exec=test
start:test.o
$(cc)
-o $(exec)
$(objs)
@echo '----------ok----------'
$(objs)
:$(cc)
-o $(objs)
-c $(srcs)
clean:
rm -f $(objs)
objs可以簡化為以下形式,相當於把.c
替換為.o
objs=
$(srcs:.c=.o)
.suffixes:.c .o
cc=gcc
srcs=test.c
objs=
$(srcs:.c=.o)
exec=test
start:test.o
$(cc)
-o $(exec)
$(objs)
@echo '----------ok----------'
.c.o:
$(cc)
-o $@ -c $<
clean:
rm -f $(objs)
模式規則
.suffixes:.c .o
表示任何x.c檔案與x.o關聯,make定義了一條規則,任何x.o檔案都從 x.c編譯而來
.c.o
make定義了一些有用的預定義變數
變數名含 義
$@
規則的目標所對應的檔名
$<
規則中的第乙個相關檔名
.suffixes:.c .o
cc=gcc
srcs=test.c \
a.cobjs=
$(srcs:.c=.o)
exec=test
start:test.o
$(cc)
-o $(exec)
$(objs)
@echo '----------ok----------'
.c.o:
$(cc)
-o $@ -c $<
clean:
rm -f $(objs)
makefile學習筆記 makefile概述
20180411 makefile學習筆記 makefile概述 makefile主要是在unix下軟體編譯時寫的,window下一般不用 unix裡makefile做的事 相當於window裡ide所做的事 會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。makefil...
Makefile學習筆記
makefile for boot asm nasm 定義變數 asmflags i include run qemu system i386 hdd boot.img boot.img boot.asm asm boot.asm f bin o boot.img install run clean...
Makefile學習筆記
本文為學習筆記,僅供參考,如有好的建議歡迎指出!makefile規則 目標檔案 依賴檔案 tab 命令 命令前必須有乙個tab exp test main.c gcc main.c o test 隱式規則 o c 同名匹配 變數 類似於c中的巨集,引用方式 arg 變數名 值 引用變數可在之後定義 ...