前言
本文通過幾個簡單的示例宿刮,可以快速了解Makefile的基本使用方法互站,適用于編譯我們平時練習(xí)所編寫的小量代碼。
1. make命令
Makefile文件內(nèi)容: all為<font color='green'>目標(biāo)</font>僵缺,這里沒有<font color='green'>依賴</font>的文件胡桃,這條<font color='green'>命令</font>是打印(echo)出“Hello Makefile”這行文字
all:
echo "Hello Makefile"
運行make后,終端打印的內(nèi)容
$ make
echo "Hello Makefile"
Hello Makefile
可以看到磕潮,Makefile的命令也打印在了終端翠胰,要想不輸出命令的內(nèi)容,可以在命令前面加上@
make可以指定要生成的目標(biāo)自脯,如果不指定之景,則默認第一個目標(biāo),我們將Makefile文件內(nèi)容修改一下
all:
@echo "Hello Makefile"
test:
@echo "Hello Test"
運行不同的命令膏潮,可以看到不同的打印信息
$ make
Hello Makefile
$ make all
Hello Makefile
$ make test
Hello Test
2. 生成文件
假設(shè)現(xiàn)在有兩個文件fun.c和main.c锻狗,需要利用Makefile生成一個可執(zhí)行文件app。
fun.c的內(nèi)容
#include <stdio.h>
void fun()
{
printf("This is fun()!\n");
}
main.c的內(nèi)容
extern void fun();
int main()
{
fun();
return 0;
}
Makefile的內(nèi)容
all: main.o fun.o
gcc -o app main.o fun.o
main.o : main.c
gcc -o main.o -c main.c
fun.o : fun.c
gcc -o fun.o -c fun.c
clean:
rm app main.o fun.o
當(dāng)執(zhí)行make命令后,終端會打印下列內(nèi)容轻纪,并生成對應(yīng)的app , main.o ,fun.o文件
gcc -o main.o -c main.c
gcc -o fun.o -c fun.c
gcc -o app main.o fun.o
3. 清除文件
依舊是上面的Makefile和源文件油额,我們輸入make clean,就可以清除剛剛生成的3個文件桐磁。打印信息如下:
$ make clean
rm app main.o fun.o
假如Makfile目錄中悔耘,有名為clean文件,make之后再執(zhí)行make clean又會發(fā)生什么呢我擂?
我們輸入touch clean產(chǎn)生一個空的文件衬以,再執(zhí)行make clean,觀察現(xiàn)象
$ touch clean
$ make clean
$ make: 'clean' is up to date.
此時make提醒clean文件是最新的校摩,而不是執(zhí)行清除操作看峻。
要解決這個問題,我們就得引入偽目標(biāo)衙吩。
偽目標(biāo)
偽目標(biāo)采用".PHONY" 關(guān)鍵字來定義互妓, 且必須是大寫字母。修改一下上面的Makefile
.PHONY:clean
all: main.o fun.o
gcc -o app main.o fun.o
main.o : main.c
gcc -o main.o -c main.c
fun.o : fun.c
gcc -o fun.o -c fun.c
clean:
rm app main.o fun.o
輸入make clean坤塞,我們會發(fā)現(xiàn)此時能夠正常執(zhí)行清除操作冯勉。
makefile內(nèi)容的注釋
在Makefile文件中,有些內(nèi)容我們需要寫一下備注摹芙,或者暫時不需要了灼狰,想注釋掉,需要怎么操作呢浮禾。很簡單交胚,只需要在需要注釋的那行前面加上#號即可,像下面這樣
#這是的Makefile的注釋
#all: main.o fun.o
.PHONY:clean
all: main.o fun.o
gcc -o app main.o fun.o
main.o : main.c
gcc -o main.o -c main.c
fun.o : fun.c
gcc -o fun.o -c fun.c
clean:
rm app main.o fun.o
本文所介紹的Makefile盈电,應(yīng)付幾個文件的編譯還可以蝴簇,在實際的工程中,會有幾十個匆帚、上百個文件熬词。要是都一個個這樣按文件名書寫,效率太低卷扮,且不好維護荡澎。后面的文章,我將會介紹Makefile的變量和函數(shù)晤锹,利用它們摩幔,我們的Makefile可以大大提升效率,且便于維護鞭铆。