gpt4 book ai didi

makefile - 在 foreach 中添加额外空间时 makefile 中缺少分隔符错误

转载 作者:行者123 更新时间:2023-12-04 14:42:49 31 4
gpt4 key购买 nike

THIS_MAKE := $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))
MAKER := $(MAKE) -f $(THIS_MAKE)

FILE_LIST=tmp/file tmp/dir/file

all:
rm -rf tmp
$(MAKER) copy_files

copy_files: $(FILE_LIST)

tmp/file: | tmp
echo hello>$@

tmp/dir/file: | tmp/dir
echo world>$@

define dst_dir_rule
$(1):
-mkdir -p $$@

endef
$(foreach dir,$(dir $(FILE_LIST)), $(eval $(call dst_dir_rule,$(dir))))

#end of makefile

上面的 makefile 应该在 FILE_LIST 变量中创建文件。
问题在于尝试为目录自动生成规则的部分。
当我运行它时,我得到一个“缺少分隔符”。错误。
当我删除逗号和 $(eval) 之间的空格时,它起作用了。

我很想知道为什么。

谢谢,
古尔

最佳答案

这是因为您需要在宏中使用制表符作为命令分隔符。由于您没有,它会产生“缺少分隔符”错误。

修复(在同一行使用 ; 命令分隔符):

define dst_dir_rule
$(1): ; -mkdir -p $$@ # as a one liner

您还可以简化:

THIS_MAKE := $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))

到:

THIS_MAKE := $(lastword $(MAKEFILE_LIST))

关于makefile - 在 foreach 中添加额外空间时 makefile 中缺少分隔符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595338/

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