【问题标题】:What's the difference between these 2 pieces of Makefile.am code?这 2 段 Makefile.am 代码有什么区别?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 问题是如果我无条件设置ASM_EXT,它仍然不起作用。我还尝试将.cpp.o 规则覆盖为echo $(kernel_SOURCES),看起来替换效果很好。使用AM_COND_IF([HOST_CPU_X86], [AC_SUBST([ASM_EXT], [".asm"])], [AC_SUBST([ASM_EXT], [".S"])]) 在configure.ac 中设置ASM_EXT 似乎也无济于事。
    • @pvc,用这些细节更新问题是合适的。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2017-01-09
    • 2012-09-22
    相关资源
    最近更新 更多