[Makefile] include 关键字
在 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.mk
all:
@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_value
target1:
@echo "Value of COMMON_VAR in target1 is $(COMMON_VAR)"
target2:
@echo "Value of COMMON_VAR in target2 is $(COMMON_VAR)"
在这个示例中,我们定义了一个名为 COMMON_VAR
的变量,并在两个目标中使用了它。在每个目标的执行过程中,该变量的值都是相同的。