【问题标题】:Troubles with case of files extensions on WindowsWindows上文件扩展名的问题
【发布时间】:2018-06-27 15:44:17
【问题描述】:

我有一个使用 arm-none-eabi 工具链在 Linux 和 Windows 下使用的 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 $@

感谢您的任何提示!

【问题讨论】:

  • 尽可能将它们放在不同的文件夹中
  • 这与 Windows 命令提示符 cmd 有什么关系?
  • aschipfl :这是执行 make 且不区分大小写的 cmd.exe。如果这与 cmd.exe 无关,则它不应该与 linux 相关。在这方面我不明白帖子标题是如何重命名的:linux没有问题(我写清楚我认为),问题在windows/cmd.exe下....

标签: linux cmd makefile


【解决方案1】:

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

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

【讨论】:

  • 很好,这是正确的方向......并导致响应。非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多