这是我第一次在这里发帖,所以很抱歉,如果这最终在错误的地方。我正试图编译一些我从GitHUb存储库下载的代码,并从MSYS Shell运行make。具有通用make规则的make文件存在一个问题。当我运行make时,我得到以下错误:C: Mios32/include/makefile/常见。Mk:143: ***多个目标模式。停止。
由于我是make和makefile的完全初学者,所以我找不到问题。这是来自common的代码。Mk文件从152行到154行:
# rule to create .elf file
$(PROJECT_OUT)/$(PROJECT).elf: $(ALL_OBJS)
@$(CC) $(CFLAGS) $(ALL_OBJS) $(LIBS) $(LDFLAGS) -o$@
如果我需要上传整个公共makefile。由于
您可以在GNU make手册中找到有关错误消息的文档。
此错误意味着您有一个静态模式规则,在目标中具有多个模式(%
字符)。您的线路在这里:
$(PROJECT_OUT)/$(PROJECT).elf: $(ALL_OBJS)
知道问题所在的唯一方法是找到PROJECT_OUT
,PROJECT
和ALL_OBJS
变量的值。毫无疑问,它们包含冒号字符和/或百分号字符。
make
程序是在UNIX上开发的工具,早在"驱动符"、反斜杠作为目录分隔符等被微软推广之前。因此,它的语法是针对UNIX系统的,其中路径名中不期望有:
,反斜杠是转义字符,等等。
如果你想在Windows上构建为POSIX系统(如GNU/Linux和MacOS)开发的软件,你必须做一些工作来翻译它们之间的路径名。在处理makefiles时,不应该使用驱动字符限定的路径,也不应该使用任何包含空格的路径,并且应该始终使用正斜杠(/
)作为目录分隔符,而不是反斜杠。