gpt4 book ai didi

makefile - 从规则中设置变量

转载 作者:行者123 更新时间:2023-12-04 19:58:06 25 4
gpt4 key购买 nike

我有一个外部工具可以获取一些资源 ( Rebar )。 Rebar运行后,我想根据目录的内容填充一个变量。

EFLAGS += -I$(PWD)/include 
EFLAGS += -pa $(PWD)/ebin
## $(PWD)/deps/* will only have contents after Rebar runs
EFLAGS += $(patsubst %,-pa %,$(wildcard $(PWD)/deps/*/ebin))

build-deps:
./rebar get-deps
./rebar compile

build-main: build-deps
erlc $(EFLAGS) $(INFILE)

如果我将它作为两个单独的调用运行,上面的将按预期工作:

make build-deps
make build-main

但是,如果我只是创建 build-main,那么 EFLAGS 会被设置,而 deps/ 目录是空的,那么目录是填充,然后我使用 EFLAGS

有什么好的方法可以让我在运行一些规则后才设置 EFLAGS 吗?

编辑:这里有一个 Makefile 可以更容易地演示问题:

A=$(wildcard test*)

foo:
touch test1

bar: foo
@echo $A

clean:
-rm test*

在这里,“foo”目标代表我对 rebar 的调用,所以想象一下,您不知道我要将哪些文件传递给 touch。如果你尝试

make clean
make bar
make bar

你会发现 make bar 的两次调用产生了不同的结果,因为在第二个中 test1 存在于 make 开始之前。我正在寻找一种方法来在运行 make clean 后立即获取第二次 make bar 调用的输出。

最佳答案

最简单的解决方案是使用 shell 来计算值,而不是使用 make 规则。像这样:

EFLAGS += -I$(PWD)/include 
EFLAGS += -pa $(PWD)/ebin
## $(PWD)/deps/* will only have contents after Rebar runs
EFLAGS += $(patsubst %,-pa %,$(wildcard $(PWD)/deps/*/ebin))

build-deps:
./rebar get-deps
./rebar compile

build-main: build-deps
for f in $(PWD)/deps/*/ebin; do paflags="$$paflags -pa $$f"; done; \
erlc $(EFLAGS) $$paflags $(INFILE)

关于makefile - 从规则中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24019750/

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