gpt4 book ai didi

linux - Windows 上文件扩展名的问题

转载 作者:太空宇宙 更新时间:2023-11-04 09:13:49 26 4
gpt4 key购买 nike

我有一个 makefile,我使用 arm-none-eabi 工具链在 Linux 和 Windows 下使用。根据预处理器的需要,该项目包含扩展名为 .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 $@

感谢您的任何提示!

最佳答案

这与make无关。正如您所说,操作系统无法识别大小写差异。如果文件系统不支持仅大小写不同的文件名,那么像 make 这样的程序就无能为力了。

除了大小写,您还必须以不同的方式命名您的文件:您必须使用 .s.sc 或其他名称,而不是 .s.S.

关于linux - Windows 上文件扩展名的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51066798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com