讓我們來嚼makefile: 自動推導功能
阿新 • • 發佈:2019-01-30
目的:
明白自動推導功能能幹什麼事。
場景:
當前目錄下有兩個檔案 main.c和makefile;
其中main.c內容如下:
#include
#include
int main(int argc, char** argv)
{
printf("functionName: %s; fileName: %s; lineNumber: %d\n" , __func__, __FILE__, __LINE__);
return 0;
}
makefile內容如下:
CC=gcc
CFLAGS=-g
RM=rm
main:main.o
$(CC) $(CFLAGS) -o [email protected] $^
main.o:main.c
$(CC) $(CFLAGS) -c $^
.PHONY=clean
clean:
$(RM) main *.o
執行命令make
可以順利進行編譯,生成目標檔案main.o 和可執行檔案main。
make的自動推導功能: 只要make看到一個規則中的目標[.o]檔案,它就會自動的把[.c]檔案加在依賴中,在這個例子中,make找到一個main.o,那麼main.c,就會被推導成main.o的依賴檔案,並且 cc -c main.c 也會被推匯出來。
簡化後的makefile:
CC=gcc
CFLAGS=-g
RM=rm
main:main.o
$(CC) $(CFLAGS) -o [email protected] $^
main.o:
.PHONY=clean
clean:
$(RM) main *.o
執行make命令:
可以看出, 本來要寫兩行的東西(方框2裡面),現在只要寫一個main.o就可以了。 相當於make幫助了開發人員多幹了一些活。
和目標clean不一樣的是,目標clean所在的規則是有命令的,相同的是,也可以像執行make clean 一樣直接執行make main.o就可以重建目標main.o.