天天看點

23、makefile常用講解(3)

8)objects = *.o

     通配符同樣可以用在變量中。并不是說[*.o]會展開,objects的值就是“*.o”。Makefile 中的變量其實就是 C/C++中的宏。如果你要讓通配符在變量中展開,也就是讓 objects 的值是所有[.o]的檔案名的集合,那麼,你可以這樣:objects := $(wildcard *.o),這種用法由關鍵字“wildcard”指出。

9)通過makefile編譯,自動推導,如果發現目前的檔案沒有做過更新,則不會編譯,隻編譯更新過了的。

附:

1、預定義變量選項

<col>

預定義變量

含義

$* 

不包含擴充名的目标檔案名稱。

$+ 

所有的依賴檔案,以空格分開,并以出現的先後為序,可能包含重複的依賴檔案。

$&lt; 

第一個依賴檔案的名稱。

$? 

所有的依賴檔案,以空格分開,這些依賴檔案的修改日期比目标的建立日期晚。

$@ 

目标的完整名稱。

$^ 

所有的依賴檔案,以空格分開,不包含重複的依賴檔案。

$% 

如果目标是歸檔成員,則該變量表示目标的歸檔成員名稱。例如,如果目标名稱為 mytarget.so(image.o),則 $@ 為 mytarget.so,而 $% 為 image.o。

AR  

歸檔維護程式的名稱,預設值為 ar。

ARFLAGS

歸檔維護程式的選項。

AS 

彙程式設計式的名稱,預設值為 as。

ASFLAGS

彙程式設計式的選項。

CC 

C 編譯器的名稱,預設值為 cc。

CCFLAGS 

C 編譯器的選項。

CPP 

C 預編譯器的名稱,預設值為 $(CC) -E。

CPPFLAGS

C 預編譯的選項。

CXX 

C++ 編譯器的名稱,預設值為 g++。

CXXFLAGS

C++ 編譯器的選項。

2、make 選項

指令行選項

  含義

-C DIR

  在讀取 makefile 之前改變到指定的目錄 DIR。

-f FILE

 以指定的 FILE 檔案作為 makefile。

-h

  顯示所有的 make 選項。

-i

  忽略所有的指令執行錯誤。

-I DIR

  當包含其他 makefile 檔案時,可利用該選項指定搜尋目錄。

-n

  隻列印要執行的指令,但不執行這些指令。

-p

  顯示 make 變量資料庫和隐含規則。

-s

  在執行指令時不顯示指令。

-w

  在處理 makefile 之前和之後,顯示工作目錄。

-W FILE

  假定檔案 FILE 已經被修改。

3、示例代碼

CC=gcc

CXX=g++

CFLAGS= -g -Wall

INC=./***

LIB=./***.a

CFLAGS+= -DSNACC_DEEP_COPY -DHAVE_VARIABLE_SIZED_AUTOMATIC_ARRAYS -Wno-deprecated -lpthread -lssl

TARGET=***

OBJ = **.o \

      ./**.o\

$(TARGET): $(OBJ)

        $(CXX) $(CFLAGS) -o $@ $^ $(LIB) 

#如下代碼,把所有的cpp檔案編譯成.o檔案

%.o: %.cpp

        $(CXX)  $(CFLAGS) $(INC) -c -o $@ $&lt;

clean:

        rm -f *.o

        rm -f $(TARGET)

參考