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 $@ ${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