gnu make:执行配方中每个 space 分隔的单词
gnumake: Execute each space-delimited word in recipe
我有以下 Makefile。
.PHONY: run
run: bin/p1 bin/p2 bin/p3
bin/p1
bin/p2
bin/p3
bin/%: %.cpp
mkdir -p bin
clang++ -o $@ $<
有没有办法消除 run
规则的重复? run
的先决条件将继续增长,因此我想避免指定它们两次。我想得到这样的东西。
.PHONY: run
run: bin/p1 bin/p2 bin/p3
$(foreach p,$^,$(shell $(p)))
但是,这行不通,我实际上不确定这到底有什么用...
你可以在这里简单地使用一个循环。 make
在 shell 中调用它。 $$
就是让i
成为一个shell变量
run: bin/p1 bin/p2 bin/p3
for i in $^; do \
$$i; \
done
我也发现这个有效。
.PHONY: run
run: bin/c1 bin/c2 bin/c3 bin/c4
$(foreach c,$^,$(c) || exit 1;)
bin/%: %.cpp
mkdir -p bin
clang++ -std=c++17 -o $@ $<
foreach
最终被此文本替换。
bin/c1 || exit 1; bin/c2 || exit 1; bin/c3 || exit 1; bin/c4 || exit 1;
这将作为 1 条长线发送到 shell。
可选,如果您不想在第一次失败时退出,您可以只使用这个。
$(foreach c,$^,$(c);)
我有以下 Makefile。
.PHONY: run
run: bin/p1 bin/p2 bin/p3
bin/p1
bin/p2
bin/p3
bin/%: %.cpp
mkdir -p bin
clang++ -o $@ $<
有没有办法消除 run
规则的重复? run
的先决条件将继续增长,因此我想避免指定它们两次。我想得到这样的东西。
.PHONY: run
run: bin/p1 bin/p2 bin/p3
$(foreach p,$^,$(shell $(p)))
但是,这行不通,我实际上不确定这到底有什么用...
你可以在这里简单地使用一个循环。 make
在 shell 中调用它。 $$
就是让i
成为一个shell变量
run: bin/p1 bin/p2 bin/p3
for i in $^; do \
$$i; \
done
我也发现这个有效。
.PHONY: run
run: bin/c1 bin/c2 bin/c3 bin/c4
$(foreach c,$^,$(c) || exit 1;)
bin/%: %.cpp
mkdir -p bin
clang++ -std=c++17 -o $@ $<
foreach
最终被此文本替换。
bin/c1 || exit 1; bin/c2 || exit 1; bin/c3 || exit 1; bin/c4 || exit 1;
这将作为 1 条长线发送到 shell。
可选,如果您不想在第一次失败时退出,您可以只使用这个。
$(foreach c,$^,$(c);)