gpt4 book ai didi

c++ - 匹配模式作为 Makefile 依赖项中函数的参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:54:54 24 4
gpt4 key购买 nike

假设文件结构如下:

a/a1.cpp
a/a2.cpp
b/b1.cpp
b/b2.cpp
Makefile

我的目标是构建两个目标文件 a.o 和 b.o,其中 a.o 依赖于 a1.cpp 和 a2.cpp,而 b.o 依赖于 b1.cpp 和 b2.cpp。然而,事实证明我无法在 Makefile 中表达这一点。这是我尝试过的:

SOURCES := a/a1.cpp a/a2.cpp b/b1.cpp b/b2.cpp
TARGETS := a.o b.o
RELEVANT = $(filter $(1)/%.cpp,$(SOURCES))
$(TARGETS): %.o: $(call RELEVANT,%)
@echo $^

我原以为在使用调用函数时,% 会被 a 或 b 替换,并且 RELEVANT 会返回所需的依赖项。然而,$^ 只返回一个空字符串,表明过滤函数显然没有按预期工作。基本上,这个问题似乎是由在模式匹配规则之前评估的函数引起的,如下所述:Makefile, Regex and multiple dependencies .尽管如此,我还是无法将那里给出的解决方案转移到我的案例中。此外,它看起来有点老套,我希望有一个不需要 bash 功能的更清晰的解决方案。

有人能想出解决这个问题的方法吗?

最佳答案

有多种方法可以做到这一点。如果你真的想用先决条件列表中的函数来做,那么你可以使用二次扩展:

.SECONDEXPANSION:

$(TARGETS): %.o: $$(call RELEVANT,%)
@echo $^

不过,我不太确定您是如何将多个 .cpp 文件编译成一个目标文件的。

关于c++ - 匹配模式作为 Makefile 依赖项中函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285521/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com