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

在foreach中添加额外空间时,makefile中缺少分隔符错误,makefile,gnu-make,Makefile,Gnu Make,上面的makefile应该在FILE_LIST变量中创建文件。 问题在于试图为目录自动生成规则的部分。 当我运行它时,会出现“缺少分隔符”错误。 当我删除逗号和$(eval)之间的空格时,它会起作用 我真的很想知道为什么 谢谢, Gur这是因为您需要在宏中使用制表符作为命令分隔符。由于没有分隔符,因此会产生“缺少分隔符”错误 修复(在同一行上使用;命令分隔符): 您还可以简化: define dst_dir_rule $(1): ; -mkdir -p $$@ # as a one liner

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

我真的很想知道为什么

谢谢,

Gur

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

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

您还可以简化:

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


谢谢你的一行规则提示。我不认为这是问题所在,因为它在没有空间的情况下工作。我在工作中使用不支持lastword的古老“make”。我试着在家里用一个新的make复制它,它在有空格和没有空格的情况下都能工作,所以可能是一些旧的make bug自那以后就被修复了。不,直到我做了更改,make 3.81才起作用。在用tab替换make recipe行前面的空格后(我认为这是复制和粘贴引起的异常)在
dst_dir_规则
函数中的
-mkdir-p$$$@
前面,我在运行此make文件时没有遇到任何问题。我使用的是GNU make版本3.81(与Ubuntu 12.04一起提供)。
define dst_dir_rule
$(1): ; -mkdir -p $$@ # as a one liner
THIS_MAKE := $(word $(words $(MAKEFILE_LIST)), $(MAKEFILE_LIST))
THIS_MAKE := $(lastword $(MAKEFILE_LIST))