
- Makefile 教程
- Makefile - 首頁
- Makefile - 為什麼使用 Makefile?
- Makefile - 宏
- Makefile - 依賴關係
- Makefile - 規則
- Makefile - 字尾規則
- Makefile - 指令
- Makefile - 重新編譯
- Makefile - 其他特性
- Makefile - 示例
- Makefile 快速指南
- Makefile - 快速指南
- Makefile - 有用資源
- Makefile - 討論
Makefile - 其他特性
在本章中,我們將深入瞭解 Makefile 的其他各種特性。
Make 的遞迴使用
make 的遞迴使用意味著在 Makefile 中使用 make 作為命令。當您希望為構成更大系統的各種子系統建立單獨的 Makefile 時,此技術非常有用。例如,假設您有一個名為“subdir”的子目錄,該目錄有自己的 Makefile,並且您希望包含目錄的 Makefile 對子目錄執行 make。您可以透過編寫以下程式碼來實現:-
subsystem: cd subdir && $(MAKE) or, equivalently: subsystem: $(MAKE) -C subdir
您可以透過複製此示例來編寫遞迴 make 命令。但是,您需要了解它們的工作原理以及原因,以及子 make 如何與頂級 make 相關聯。
將變數傳遞給子 Make
頂級 make 的變數值可以透過環境透過顯式請求傳遞給子 make。這些變數在子 make 中定義為預設值。除非您使用“-e”開關,否則您無法覆蓋子 make Makefile 中使用的 Makefile 中指定的變數。
要傳遞或匯出變數,make 會將變數及其值新增到環境中,以便執行每個命令。然後,子 make 使用環境來初始化其變數值表。
特殊變數 SHELL 和 MAKEFLAGS 始終匯出(除非您取消匯出它們)。如果您將 MAKEFILES 設定為任何值,則會匯出它。
如果您想將特定變數匯出到子 make,請使用 export 指令,如下所示:-
export variable ...
如果您想阻止匯出變數,請使用 unexport 指令,如下所示:-
unexport variable ...
變數 MAKEFILES
如果定義了環境變數 MAKEFILES,則 make 會將其值視為要讀取的其他 Makefile 的名稱列表(用空格分隔),然後再讀取其他 Makefile。這與 include 指令的工作方式非常相似:各種目錄都會搜尋這些檔案。
MAKEFILES 的主要用途是在 make 的遞迴呼叫之間進行通訊。
從不同目錄包含標頭檔案
如果您將標頭檔案放在不同的目錄中,並且您在不同的目錄中執行 make,則需要提供標頭檔案的路徑。這可以透過在 Makefile 中使用 -I 選項來實現。假設 functions.h 檔案位於 /home/tutorialspoint/header 資料夾中,其餘檔案位於 /home/tutorialspoint/src/ 資料夾中,則 Makefile 將按如下方式編寫:-
INCLUDES = -I "/home/tutorialspoint/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 $<
追加更多文字到變數
通常,將更多文字新增到已定義變數的值中非常有用。您可以使用包含“+=”的行來實現,如下所示:-
objects += another.o
它獲取變數 objects 的值,並在其後新增文字“another.o”,前面加一個空格,如下所示。
objects = main.o hello.o factorial.o objects += another.o
以上程式碼將 objects 設定為“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,則只需在命令提示符下鍵入 make,它就會執行 Makefile 檔案。但是,如果您為 Makefile 指定了其他名稱,則使用以下命令:-
make -f your-makefile-name