Compiler errors 使用GNU编译器时生成文件错误:多个目标模式

Compiler errors 使用GNU编译器时生成文件错误:多个目标模式,compiler-errors,makefile,gnu,gnu-make,make,Compiler Errors,Makefile,Gnu,Gnu Make,Make,我一直在尝试使用Windows命令窗口和gnu编译器编译一个项目。我有一个错误: ../../../../make/compiler_rules.mk:40: *** multiple target patterns. Stop. 以下是makefile的第29到45行: #----------------------------------------------------------------------* #### Compilation rules. ASM file

我一直在尝试使用Windows命令窗口和gnu编译器编译一个项目。我有一个错误:

  ../../../../make/compiler_rules.mk:40: *** multiple target patterns.  Stop.
以下是makefile的第29到45行:

    #----------------------------------------------------------------------*
#### Compilation rules. ASM files.
#----------------------------------------------------------------------*
$(OBJ_DIR)/%.s.o: $(A_DIR)/%.s $(OIL_OUTPUTS)
    @if [ ! -d $(OBJ_DIR) ]; 
    then mkdir -p $(OBJ_DIR); 
    fi;
    $(AS) $(ASFLAGS) $< -o $@

$(OBJ_DIR)/%.S.i: $(A_DIR)/%.S $(OIL_OUTPUTS)
    @if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi;
    $(CPP) $(CPPFLAGS) $< -o $@

$(OBJ_DIR)/%.S.o: $(OBJ_DIR)/%.S.i $(OIL_OUTPUTS)
    @if [ ! -d $(OBJ_DIR) ]; then mkdir -p $(OBJ_DIR); fi;
    $(AS) $(ASFLAGS) $< -o $@
#----------------------------------------------------------------------*
####汇编规则。ASM文件。
#----------------------------------------------------------------------*
美元(OBJ\U DIR)/%s.o:$(A\U DIR)/%s$(石油输出)
@如果[!-d$(OBJ_DIR)];
然后mkdir-p$(OBJ_DIR);
fi;
$(AS)$(ASFLAGS)$<-o$@
美元(OBJ\U DIR)/%.S.i:$(A\U DIR)/%.S$(石油输出)
@如果[!-d$(OBJ_DIR)];然后mkdir-p$(OBJ_DIR);fi;
$(CPP)$(CPPFLAGS)$<-o$@
$(OBJ\U DIR)/%S.o:$(OBJ\U DIR)/%S.i$(石油输出)
@如果[!-d$(OBJ_DIR)];然后mkdir-p$(OBJ_DIR);fi;
$(AS)$(ASFLAGS)$<-o$@

我通过之前的一些文章了解到,这是由于文件或目录的名称中是否有空格或冒号造成的。我查过了,没有。可能是什么

这不是一个完整的答案,但希望它能帮助我们弄清楚到底发生了什么。我创建了以下生成文件:

all: a.txt a.TXT
%.TXT:
    echo HELLO > $@
%.txt:
    echo hello > $@
当我在Linux下为这个文件运行
make
时,a.txt和a.txt目标被分别处理,即它们都被构建

然而,如果我将它复制到我的古老的windows XP虚拟机上,并使用运行它,它似乎将a.txt和a.txt视为同一个东西-特别是只有一个得到构建。这与您在
$(OBJ_DIR)/%.s.o
$(OBJ_DIR)/%.s.o
中看到的行为并不完全相同,但它与Linux行为有很大的不同,因此我相信这是由于,以及这个特定的发行版是如何处理它的。这与您使用的发行版相同吗?(3.81版)


因此,很抱歉,我现在无法提出修复方案,但我认为您可能必须共享更多/所有makefile(以及支持的.mk文件),以及需要构建的目标。

在该行上方张贴5-10行(用于上下文)。那个makefile是手工编写的还是自动生成的?我已经编辑了这个问题并发布了更多的makefile行。makefile是手工编写的,但不是我写的。我看不出有任何错误(除了粘贴时可能意外地拆分了第一行
@if
)。如果它在原始makefile中像那样被拆分,那很奇怪。不,它在原始文件中没有被拆分。我也查看了路径,看看是否有什么问题,但一切似乎都很好!
$(OBJ_DIR)
的值是多少?
$(机油输出)
的值是多少?你能链接到这个软件的网页吗?什么版本的make?不管怎样,谢谢你。实际上,我不能共享所有的目标和makefile,因为这个makefile编译整个操作系统。我之前共享的链接[使您能够访问存储库。另一方面,我使用的是make的3.81版本。我尝试为不同的应用程序和不同的traget构建系统,但徒劳。这可能是由于我使用MinGW造成的吗?