📜  makefile 扩展 (1)

📅  最后修改于: 2023-12-03 15:32:48.240000             🧑  作者: Mango

Makefile 扩展

Makefile 是一种自动化编译的工具,它可以将源代码文件自动转换为可执行的二进制文件。Makefile 扩展是一种对 Makefile 文件扩展的方式,使其支持更多的功能和更复杂的编译规则。以下是一些常见的 Makefile 扩展。

VPATH

VPATH 是一个变量,用于指定 make 查找文件的目录。它可以包含多个目录,用冒号分隔。假如我们的源代码文件存放在 src 目录下,我们可以将 VPATH 设置如下:

VPATH = src

这样,make 程序在寻找源代码文件时,会优先在 src 目录下查找。

PHONY

PHONY 是一个关键字,用于告诉 make 程序,某些规则不是具体的文件,而仅仅是一个规则名。例如:

.PHONY: clean
clean:
    rm -f *.o

这里,我们定义了一个名为 clean 的规则,它的作用是删除所有的 .o 文件。我们使用 .PHONY 告诉 make,clean 不是一个具体的文件,而是一个规则名。这样,当我们执行 make clean 命令时,make 程序不会寻找 clean 文件。

Conditional

Conditional 是一个条件判断语句,用于在 Makefile 中进行条件判断。例如:

ifeq ($(DEBUG),yes)
    CFLAGS += -g
    LIBS += -lm_debug
else
    CFLAGS += -O2
    LIBS += -lm
endif

这里,我们定义了一个条件判断,它的作用是根据 DEBUG 变量的值来确定编译选项和链接库。如果 DEBUG 变量的值为 yes,那么编译选项将包含 -g 选项,链接库将使用 lm_debug 库。否则,编译选项将包含 -O2 选项,链接库将使用 lm 库。

Functions

Functions 是一些预定义的函数,可以在 Makefile 中使用。以下是一些常用的函数:

  • $(wildcard pattern):查找匹配 pattern 的文件列表。
  • $(subst from,to,text):将 text 中的 from 替换为 to。
  • $(patsubst pattern,replacement,text):将 text 中匹配 pattern 的部分替换为 replacement。
  • $(strip string):去除 string 中的空格。
  • $(shell command):执行 shell 命令,并返回输出结果。

我们可以在 Makefile 中使用这些函数来实现更复杂的编译规则。

以上是一些常见的 Makefile 扩展,它们可以帮助我们更方便地管理和编译源代码。