gpt4 book ai didi

makefile - makefile中shell的for循环

转载 作者:行者123 更新时间:2023-12-05 01:22:47 24 4
gpt4 key购买 nike

我写了一个makefile,希望它可以像这样依次生成文件

1.out
2.out
3.out

制作文件

TOUCH := $(shell for n in 'seq 1 3'; do echo $$n ;done)
.PHONY: test
test:
@$(TOUCH)

[OK] 生成结果:

1
2
3

但是,当我将 echo 替换为 touch 时,

TOUCH := $(shell for n in 'seq 1 3'; do touch $$n.out ;done)

[错误] 生成结果:

1
seq
3.out

最佳答案

您似乎在这里混合了两个完全独立的结构。

VARIABLE := value

value赋给变量。

VARIABLE := $(shell echo value)

将使用 shell 生成一个字符串,然后将该字符串分配给 VARIABLE。这发生在 Makefile 被解析时,即在 Make 尝试实际执行任何配方之前。

我想你正在寻找这个:

TOUCH := for n in $$(seq 1 3); do touch $$n.out; done
.PHONY: test
test:
@$(TOUCH)

当然也可以内联;

.PHONY: test
test:
@for n in $$(seq 1 3); do touch $$n.out; done

不过,更好的设计是让 Make 负责:

.PHONY: test
test: 1.out 2.out 3.out
%.out:
@touch $@

(就个人而言,我会在任何地方省略 @ 前缀,以便您可以看到发生了什么。如果输出困扰您,请在调试完内容后使用 make -s 运行.)

关于makefile - makefile中shell的for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27030888/

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