Makefile 其他功能


make 遞回使用

遞回使用的手段使用,make在makefile作為命令。這種技術是非常有用的,當你想要的makefile各種子系統組成一個更大的系統。例如,假設你有一個子目錄,子目錄都有其自己的makefile,並且您希望所在目錄的makefile中執行make子目錄。可以做到這一點如以下:

subsystem:
        cd subdir && $(MAKE)

or, equivalently
 	
subsystem:
        $(MAKE) -C subdir

 

可以編寫遞回複製這個例子只是通過make命令,但有很多事情,瞭解他們是如何和為什麼工作的,以及如何子涉及到頂層make。


通訊變數到子make

頂層make變數的值可以被傳遞到子通過環境,通過顯式請求。這些變數定義子作為預設值,但不會覆蓋子的makefile使用makefile中所指定的,除非使用`-e'開關

向下傳遞,或匯出,一個變數,變數和其值的環境中執行每個命令新增。子make反過來,make使用環境變數值來初始化它的表格

特殊變數SHELL和MAKEFLAGS總是匯出(除非取消匯出)。 MAKEFILES匯出,如果把它設定到任何東西。

如果想匯出特定變數的一個子製造,使用匯出指令,像這樣:

export variable ...

如果想阻止一個變數被匯出的,使用撤消匯出的指令,像這樣:

unexport variable ...

MAKEFILES 變數

MAKEFILES如果環境變數的定義,make額外的makefile 名稱列表(由空格分隔)之前被讀取別人認為其值。這很像include指令:不同的目錄中查詢這些檔案。

makefile的主要用途是MAKE遞回呼叫之間的通訊


標頭檔案包含在不同的目錄

如果已經把你的標頭檔案在不同的目錄,在不同的目錄中執行make,那麼它需要告訴標頭檔案的路徑。這是可以做到的makefile中使用-I選項。假設該functions.h檔案可在/home/yiibai/header頭和其他檔案/home/yiibai/src/然後進行檔案將被寫入如下。 
INCLUDES = -I "/home/yiibai/header"
CC = gcc
LIBS =  -lm
CFLAGS = -g -Wall
OBJ =  main.o factorial.o hello.o

hello: ${OBJ}
   ${CC} ${CFLAGS} ${INCLUDES} -o [email protected] ${OBJS} ${LIBS}
.cpp.o:
   ${CC} ${CFLAGS} ${INCLUDES} -c $<



追加更多的文字變數

通常,它用於新增更多的文字,已定義的變數的值。make 這行包含'+ =',像這樣:

objects += another.o

這需要值的變數物件,並新增文字`another.o'(前面由一個單一的空間)。因此:

objects = main.o hello.o factorial.o
objects += another.o

設定`檔案main.o hello.o factorial.o another.o'的物件。

使用'+ ='是類似於:

objects = main.o hello.o factorial.o
objects := $(objects) another.o


Makefile中的續行

如果不喜歡太大的行,在Makefile中,然後你可以打破線使用反斜槓“\”,如下圖所示

OBJ =  main.o factorial.o \
	hello.o

is equivalent to

OBJ =  main.o factorial.o hello.o


從命令提示字元下執行的Makefile

如果已經準備好請示的Makefile的名稱為“Makefile”檔案,然後簡單地寫在命令提示字元下,它將執行Makefile檔案。但是,如果有任何其他的名字的Makefile,然後使用以下命令
make -f your-makefile-name