2024年3月24日发(作者:)

makefile notdir用法

Makefile中的notdir函数用于从文件路径中提取出文件名。在Makefile中,

我们经常需要处理文件路径,例如获取文件名、获取文件所在目录等,这时就可

以使用notdir函数来实现。

notdir函数的语法如下:

()

其中names是一个文件路径列表,可以是变量名或者字符串。notdir函数将会

去除每个文件路径中的目录部分,只返回文件名部分。

notdir函数的使用场景非常广泛。在实际的软件开发中,我们常常需要将源文

件编译成目标文件,并将目标文件放在指定的目录中。此时,我们可以通过notdir

函数提取源文件的文件名,然后将目标文件命名为相同的文件名,再指定目标文

件的存放目录。

以下是一个示例Makefile,用来编译C源文件并将目标文件放在指定的目录中:

makefile

# 源文件列表

SRCS := src/file1.c src/file2.c src/file3.c

# 目标文件列表

OBJS := (patsubst %.c, obj/%.o, (notdir (SRCS)))

# 目标文件所在目录

OBJ_DIR := obj

# 编译参数

CFLAGS := -std=c99

# 目标文件编译规则

(OBJ_DIR)/%.o: src/%.c

mkdir -p (@D)

(CC) (CFLAGS) -o @ -c <

# 构建目标

all: (OBJS)

# 清除目标文件

clean:

rm -rf (OBJ_DIR)

.PHONY: all clean

在上面的示例中,SRCS变量定义了源文件列表,包含了三个C源文件。通过

notdir函数,我们将文件路径中的目录部分去除,得到了文件名列表file1.c、

file2.c和file3.c。然后,我们使用patsubst函数将文件名列表中的.c后缀替换

为.o后缀,并加上了目标文件所在目录前缀obj/,得到目标文件列表obj/file1.o、

obj/file2.o和obj/file3.o。

在目标规则中,我们指定了如何将C源文件编译成目标文件。通过mkdir -p命

令来创建目标文件所在的目录,然后使用(CC)命令编译源文件,生成目标文件。

最后,我们定义了一个名为all的目标,依赖于(OBJS)变量,即目标文件列表。

当我们执行make命令时,会按照依赖关系自动构建目标文件。

另外,我们还定义了一个clean目标,用于清除目标文件。通过执行rm -rf命

令,将目标文件所在的目录完全删除。

通过使用notdir函数,我们可以轻松地从文件路径中提取出文件名,方便地进

行文件操作和处理。在Makefile中,notdir函数是非常有用的一个函数,帮助

我们简化了文件路径操作的过程。