在 Makefile 中,include
關鍵字的作用是引入其他文件的內容,通常用于將其他 Makefile 文件(通常是頭文件)的內容包含到當前的 Makefile 中。這樣可以實現模塊化管理和代碼重用。
include使用
使用 include
關鍵字的語法如下:
include <filename>
其中 <filename>
是要包含的文件名,可以是相對路徑或絕對路徑。
include
的作用主要有以下幾點:
-
模塊化管理:通過將一些公共的規則、變量或函數定義放在單獨的文件中,可以提高 Makefile 的可讀性和可維護性。通過在不同的 Makefile 中使用
include
來引入這些公共部分,可以實現模塊化管理。 -
代碼重用:某些項目可能存在多個相關的 Makefile,它們可能有一些公共的部分,使用
include
可以將這些公共部分抽取出來,避免重復編寫相同的代碼,提高代碼的重用性。 -
定制化配置:通過
include
可以方便地引入不同的配置文件,從而實現針對不同環境或需求的定制化配置。
下面是一個簡單的示例,展示了在 Makefile 中使用 include
引入另一個文件的內容:
# common.mk 文件
CC = gcc
CFLAGS = -Wall# 其他公共規則和變量定義
COMMON_VAR := value
# 主Makefile
include common.mkall:@echo "Building all targets"clean:@echo "Cleaning up"# 使用common.mk 定義的變量
target:@echo $(COMMON_VAR)
在這個示例中,common.mk
文件中定義了一些公共的變量和規則,主 Makefile 使用 include
引入了這些內容,從而實現了代碼的重用和模塊化管理。
變量定義 :=
VARIABLE_NAME := value
其中:
VARIABLE_NAME
是變量的名稱,可以是任何合法的標識符;value
是變量的值。
:=
是 Makefile 中的賦值運算符,用于將右側的值賦給左側的變量。相比其他賦值運算符(如 =
),:=
有以下優點:
-
延遲求值:當使用
:=
進行賦值時,變量的值不會在定義時立即求值。而是在變量被使用時才會求值,這樣可以避免一些問題,例如遞歸變量的無限循環等。 -
只展開一次:使用
:=
定義的變量,在被使用時只會被展開一次,而其他賦值形式可能會多次展開同一個變量,導致意外的結果。
因此,使用 :=
進行賦值是比較常見的做法,特別是對于需要使用高級功能的 Makefile。
下面是一個簡單的示例,展示了如何在 Makefile 中使用 :=
進行變量定義:
COMMON_VAR := common_valuetarget1: @echo "Value of COMMON_VAR in target1 is $(COMMON_VAR)"target2:@echo "Value of COMMON_VAR in target2 is $(COMMON_VAR)"
在這個示例中,我們定義了一個名為 COMMON_VAR
的變量,并在兩個目標中使用了它。在每個目標的執行過程中,該變量的值都是相同的。