Makefile GNU-Make:“;dir此时不在预料之中”;

Makefile GNU-Make:“;dir此时不在预料之中”;,makefile,gnu-make,Makefile,Gnu Make,我有一个makefile,包括以下几行: buildrepo: @$(call make-repo) define make-repo for dir in $(C_SRCS_DIR); \ do \ mkdir -p $(OBJDIR)/$$dir; \ done endef 在命令行中,使用$(C_SRCS_dir)中的dir命令\我收到以下错误消息: "dir not expected at this moment" make: *** [buildr

我有一个makefile,包括以下几行:

buildrepo:
    @$(call make-repo)

define make-repo
   for dir in $(C_SRCS_DIR); \
   do \
    mkdir -p $(OBJDIR)/$$dir; \
   done
endef
在命令行中,使用$(C_SRCS_dir)中的dir命令
\我收到以下错误消息:

"dir not expected at this moment"
make: *** [buildrepo] Error 255
我正在使用
gnumake


有谁能告诉我出了什么问题吗?

实际上这是为。。。在里面做done
语句是Unix命令而不是GNU make命令,因此我猜您使用的是Windows机器(或任何其他机器)。你必须为你的系统找到等价物

但GNU make有一个foreach函数,其工作原理如下:

$(foreach dir,$(C_SRCS_DIR),mkdir -p $(OBJDIR)/$(dir);)
mkdir -p $(addprefix $(OBJDIR)/,$(C_SRCS_DIR))
还请注意,在您非常特殊的情况下(与GNU make无关,但与Windows相关),您可以创建所有dir,而无需for/foreach循环,如下所示:

$(foreach dir,$(C_SRCS_DIR),mkdir -p $(OBJDIR)/$(dir);)
mkdir -p $(addprefix $(OBJDIR)/,$(C_SRCS_DIR))

这是我的工作表格。
$(INFO SHELL=$(SHELL))
的输出是什么通常,即使
$(addprefix)
不起作用,您仍然可以使用
$(patsubst)