Automake通常可以从_SOURCES
列表中推断出链接所需的对象名称。
以下使用旧式后缀规则的示例有效:
ACLOCAL_AMFLAGS = -I m4
bin_PROGRAMS = testam
testam_SOURCES = testam.c c.asn1
.asn1.c:
> $@
_
$ rm -f testam && make
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o testam.exe testam.o c.o
libtool: link: gcc -g -O2 -o testam.exe testam.o c.o
如您所见,automake将文件c.o
添加到构建testam
所需的对象列表中。
但如果我尝试将规则转换为模式规则,则c.o
不会被添加:
%.c: %.asn1
> $@
_
$ rm -f testam && make
/bin/sh ./libtool --tag=CC --mode=link gcc -g -O2 -o testam.exe testam.o
libtool: link: gcc -g -O2 -o testam.exe testam.o
我必须使用模式规则,因为我的工具实际上有两个输出:%.c %.h: %.asn1
。
为什么会发生这种情况以及如何显式添加目标文件?我应该使用_DEPENDENCIES
和_LDADD
还是BUILT_SOURCES
?
Automake的依赖关系跟踪不适用于添加了以下内容的目标文件:
foo_LIBADD: extra1.o extra2.o
生成 .Po
个文件,但Makefile
不包含这些文件