Makefile:可以将 VPATH 变量应用于分配 Makefile 变量吗?

Posted

技术标签:

【中文标题】Makefile:可以将 VPATH 变量应用于分配 Makefile 变量吗?【英文标题】:Makefile: Can VPATH variable is applied to assigning Makefile variable? 【发布时间】:2015-11-29 12:42:52 【问题描述】:

我尝试编写简单的 makefile 来练习。

我有两个目录 1.srcs(.c), 2.include(.h)

并尝试定义包含所有 .c 文件的 SRCS 变量

在当前目录和srcs目录中。

下面是我的 Makefile

CURDIR = $(shell pwd)
OBJDIR = $(CURDIR)/objdir
VPATH = $(CURDIR)/srcs
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c, %.o, $(SRCS))

all: main

main: $(OBJS)
        gcc -o $@ $^

$(OBJS): $(SRCS) | $(OBJDIR)
        gcc -c -o $@ $<

$(OBJDIR): 
        mkdir objdir

我将 current/src 目录指定为 VPATH 以进行查找

当前目录和 current/srcs 中的所有 *.c 文件,但

在 /srcs 目录中找不到 *.c 文件。

可能是make在Makefile中定义变量时不能使用VPATH

对吗?如果它是正确的,请让我知道更好的方法:)

谢谢。

【问题讨论】:

【参考方案1】:

VPATH 用于目录 make 应该搜索以查找先决条件。

$(wildcard) 搜索的位置不会改变。

VPATH 允许您在规则的先决条件列表中使用foo.c(显式或隐式),并在当前目录和VPATH 目录中查找它的文件。

如果您希望SRCS 包含来自srcs 目录的.c 文件,那么您需要在$(wildcard) 分配的附加$(wildcard) 调用中包含srcs/*.c

SRCS = $(wildcard *.c) $(wildcard srcs/*.c)

【讨论】:

以上是关于Makefile:可以将 VPATH 变量应用于分配 Makefile 变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 Makefile 中,如何使通配符函数适用于 VPATH 变量设置的所有路径中的文件

makefile 里的vpath

makefile里怎么指定库的路径

Linux C基础——” Makefile “ 文件管理大师你拜访过嘛?

7.Makefile目标文件搜索(VPATH和vpath)

7.Makefile目标文件搜索(VPATH和vpath)