这两个Makefile.am代码有什么区别?

时间:2019-08-31 17:19:55

标签: makefile autotools automake

我对使用自动工具是完全陌生的,因此这可能是一个愚蠢的问题,但是我还是会尝试的。我有两片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 $@

编辑:用.cpp.o暂时覆盖echo $(kernel_SOURCES)规则显示$(ASM_EXT)中的kernel_SOURCES被正确替换了。例如,对于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变量也没有任何区别。 / p>

1 个答案:

答案 0 :(得分:0)

[答案已删除-即将删除]