通过 Automake 创建数据文件

Create data file by Automake

我想让Automake在我的爱好项目中创建一个.img文件(以在虚拟机中测试编译后的程序)。

我可以用Automake编译程序,例如:

noinst_PROGRAMS = loader.elf

loader_elf_SOURCES = init.s console.c disk.c elf.c ext2.c fat.c lib.c loader.c multiboot.c
loader_elf_LDFLAGS = $(AM_LDFLAGS) -T $(srcdir)/loader.ld
loader_elf_LDADD = $(LDADD) -lgcc

但它不适用于数据文件:

noinst_DATA = x.img
x_img_DEPENDENCIES = loader.elf
x_img_LINK = makeimg.sh

当我执行 autoreconf -i 时,我收到此错误消息:

automake: warnings are treated as errors
arch/i386/emulator/Makefile.am:14: warning: variable 'x_img_DEPENDENCIES' is defined but no program or
arch/i386/emulator/Makefile.am:14: library has 'x_img' as canonical name (possible typo)
autoreconf: automake failed with exit status: 1

我正在尝试将我的 Makefile 转换为 Makefile.am。它在 Makefile 中就像:

x.img: loader.elf
    makeimg.sh $@ $<

我研究了 gnu ftp 页面上的 Automake 手册,我认为在 Automake 中不可能将源或依赖项添加到 DATA 文件。我应该怎么办?我应该将 .img 文件放入主程序而不是数据中吗?

我正在使用 Automake 1.16.1 和 Autoconf 2.69(如果重要的话)。

只需将此添加到 Makefile.am:

noinst_PROGRAMS = loader.elf
loader_elf_SOURCES = ...

noinst_DATA = x.img
x.img: loader.elf
    makeimg.sh x.img loader.elf

(我已将 $@$< 更改为使用显式名称,因为显然 make 的某些版本在 $@$< 在由显式文件名而不是模式或后缀定义的规则中。)