【问题标题】:In Makefile, how to make wildcard function work for files in all the paths set by VPATH variable在 Makefile 中,如何使通配符函数适用于 VPATH 变量设置的所有路径中的文件
【发布时间】:2017-01-10 07:50:17
【问题描述】:

我有两个文件如下(来自树命令)。

.
|-- Makefile
|-- dir1
|   `-- file1.c
`-- dir2
    `-- file2.c

我想编译dir1和dir2目录中的文件,所以我写了一个Makefile如下。

VPATH = dir1:dir2
CFILES := ${wildcard *.v}
$(info CFILES = ${CFILES})

输出:

CFILES = 

所以通配符函数不会自动搜索由 VPATH 变量设置的路径。
如果我在通配符函数中专门写了路径,它就可以工作。

CFILES := ${wildcard dir1/*.c dir2/*.c}   <== this makes it work
$(info CFILES = ${CFILES})

输出:

CFILES = dir1/file1.c dir2/file2.c

我只想将现有路径添加到 Makefile,但有什么方法可以将通配符函数用于 VPATH 设置的路径? (假设我需要从编译列表中删除一些文件,所以我需要文件列表。只是好奇..)

【问题讨论】:

标签: c makefile


【解决方案1】:

您可以使用 Make 的文本转换功能将目录列表转换为所需的通配符命令。看看GNU Make manual,他们甚至在他们的示例中使用提取 VPATH 的目录。考虑类似的事情:

$(wildcard $(addsuffix /*.c,$(subst :, ,$(VPATH))

由于您通过通配符获得文件的完整路径,因此似乎不需要使用 VPATH。恕我直言,VPATH 是个坏主意,精心设计的构建系统不要使用它。

还要考虑如果同名文件出现在不同的目录中会发生什么!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多