Linux Windows上文件扩展名的问题

Linux Windows上文件扩展名的问题,linux,cmd,makefile,Linux,Cmd,Makefile,我有一个在Linux和windows下使用arm ONE eabi工具链的makefile。根据预处理器的需要,该项目包含扩展名为.s或.s的汇编程序文件 在Linux下,makefile规则可以很容易地区分这些目标文件,并且对每个目标文件使用单独的规则。这世上没问题。 在Windows下,我定义的处理.S文件的规则无法处理这些文件。另一方面,我的.s文件规则运行良好 返回的错误为: make: Pas de règle pour fabriquer la cible « obj/secmode

我有一个在Linux和windows下使用arm ONE eabi工具链的makefile。根据预处理器的需要,该项目包含扩展名为.s或.s的汇编程序文件

在Linux下,makefile规则可以很容易地区分这些目标文件,并且对每个目标文件使用单独的规则。这世上没问题。 在Windows下,我定义的处理.S文件的规则无法处理这些文件。另一方面,我的.s文件规则运行良好

返回的错误为:

make: Pas de règle pour fabriquer la cible « obj/secmodes.S », nécessaire pour « imgm_essProcMode.elf ». Arrêt.

No rule to build the target obj/secmode.S, required for imgm_essProcMode.elf. Stop
我不明白为什么源代码的路径不正确:所有的.s、.s、.c都在“src”文件夹中;“obj”文件夹用于生成的对象。。。 我意识到windows不关心扩展情况!这似乎混淆了(gnu)make

所以我的问题是,在Windows环境下执行的makefile中,我们能否以不同的方式管理.s和.s?如果是,我的规则将如何修改

下面是我的makefile的一些快照:

AOBJ_FILES := $(addprefix obj/,$(notdir $(ASM_FILES:.s=.o)))
ASOBJ_FILES := $(addprefix obj/,$(notdir $(ASMS_FILES:.S=.o)))
ALL_OBJ_FILES := $(COBJ_FILES) $(AOBJ_FILES) $(ASOBJ_FILES) 
.../...
image : $(BINEXECUTABLE)

all : $(EXECUTABLE)

obj/%.o: src/%.S
    $(TCPREFIX)-gcc $(AOPTgcc) -Xassembler -acdghln=$(basename $@).lst -o $@ $<

obj/%.o: src/%.s
    $(TCPREFIX)-as $(AOPT) $< -o $@ -acdghln=$(basename $@).lst

obj/%.o: src/%.c
    $(TCPREFIX)-gcc $(COPT) -Wa,-acdghln=$(basename $@).lst $(DEFINES) -o $@ $<

$(EXECUTABLE): $(ALL_OBJ_FILES)
    $(TCPREFIX)-gcc $(LOPTgcc) $^ -o $@
AOBJ_文件:=$(addprefix obj/,$(notdir$(ASM_文件:.s=.o)))
ASOBJ_文件:=$(addprefix obj/,$(notdir$(ASMS_文件:.S=.o)))
所有对象文件:=$(COBJ文件)$(AOBJ文件)$(ASOBJ文件)
.../...
图像:$(可执行)
全部:$(可执行)
obj/%.o:src/%.S
$(TCPREFIX)-gcc$(AOPTgcc)-Xassembler-acdghln=$(basename$@).lst-o$@$<
obj/%.o:src/%.s
$(TCPREFIX)-as$(AOPT)$<-o$@-acdghln=$(basename$@).lst
obj/%.o:src/%.c
$(TCPREFIX)-gcc$(COPT)-Wa,-acdghln=$(basename$@).lst$(DEFINES)-o$@$<
$(可执行文件):$(所有对象文件)
$(TCPREFIX)-gcc$(LOPTgcc)$^-o$@

谢谢你的提示

这与make无关。正如你所说,是操作系统没有意识到这种情况的不同。如果文件系统不支持只有大小写不同的文件名,那么make这样的程序就无能为力


您必须以不同的方式命名您的文件,而不仅仅是为了方便:您必须使用
.s
.sc
或其他东西,而不是
.s
.s
这与make无关。正如你所说,是操作系统没有意识到这种情况的不同。如果文件系统不支持只有大小写不同的文件名,那么make这样的程序就无能为力


除了大小写之外,您还必须对文件进行不同的命名:您必须使用
.s
.sc
或其他名称,而不是
.s
.s

多亏了MadScientist,解决方案确实使用了另一个扩展名,而不是大写的扩展名。
我第一次尝试了一个随机的(.sp),但被gcc拒绝了。在我的例子中,对于需要预处理的asm文件,适当的扩展名是.sx。只需对这些文件的makefile稍加修改就可以解决所有问题!
再次感谢MadScientist。

感谢MadScientist,解决方案确实使用了另一个扩展而不是大写扩展。
我第一次尝试了一个随机的(.sp),但被gcc拒绝了。在我的例子中,对于需要预处理的asm文件,适当的扩展名是.sx。只需对这些文件的makefile稍加修改就可以解决所有问题!
再次感谢MadScientist。

如果可能,将它们放在不同的文件夹中这与Windows命令提示符有什么关系?aschipfl:这是执行make的cmd.exe,不区分大小写。如果这与cmd.exe无关,则不应与linux相关。在这方面,我不明白文章标题是如何被重命名的:linux没有问题(我想我写得很清楚),问题是在windows/cmd.exe下……如果可能的话,把它们放在不同的文件夹中这与windows命令提示符有什么关系?aschipfl:这是执行make的cmd.exe,不区分大小写。如果这与cmd.exe无关,则不应与linux相关。在这方面,我不明白文章的标题是如何被重命名的:linux没有问题(我想我写得很清楚),问题是在windows/cmd.exe下……太好了,这是正确的方向。。。并导致回应。谢谢!太好了,这是正确的方向。。。并导致回应。谢谢!