【发布时间】:2020-01-04 12:00:34
【问题描述】:
我对使用 autotools 完全陌生,所以这可能是一个愚蠢的问题,但无论如何我都会尝试。我有两张Makefile.am。除了一个工作正常,另一个不行。
这很好用。
sbin_PROGRAMS = kernel
kernel_SOURCES = \
src/arch/$(host_cpu)/arch_sysdefs.h \
src/arch/$(host_cpu)/boot.asm \
src/arch/$(host_cpu)/cpu.asm \
src/arch/$(host_cpu)/isr.asm \
src/kmain.cpp
但事实并非如此。 .asm 文件被生成的Makefile 完全忽略。
if HOST_CPU_X86
ASM_EXT = .asm
else
ASM_EXT = .S
endif
sbin_PROGRAMS = kernel
kernel_SOURCES = \
src/arch/$(host_cpu)/arch_sysdefs.h \
src/arch/$(host_cpu)/boot$(ASM_EXT) \
src/arch/$(host_cpu)/cpu$(ASM_EXT) \
src/arch/$(host_cpu)/isr$(ASM_EXT) \
src/kmain.cpp
我想做的是,我想为我的项目将支持的某些 CPU 的汇编文件使用不同的后缀。
我还添加了将.asm 转换为目标文件的必要规则。
.asm.o:
yasm -f $(YASM_OUT_FMT) $< -o $@
编辑:用echo $(kernel_SOURCES) 临时覆盖.cpp.o 规则表明kernel_SOURCES 中的$(ASM_EXT) 被正确替换。例如,对于 x86-64 CPU,src/arch/$(host_cpu)/boot$(ASM_EXT) 变为 src/arch/x86_64/boot.asm,对于 ARM 等,变为 src/arch/arm/boot.S。此外,从 autoconf.ac 中设置 ASM_EXT 变量没有任何区别。
【问题讨论】:
标签: makefile autotools automake