【发布时间】: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下....