1. 程式人生 > >讓我們來嚼makefile: 自動推導功能

讓我們來嚼makefile: 自動推導功能

目的:

明白自動推導功能能幹什麼事。

場景:

當前目錄下有兩個檔案 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.