8

你如何在automake中设置库的顺序?

在我的 am 文件中,我有类似的内容:

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc

现在,当我编译时,我也得到了类似的编译行:

gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a

问题是 libmine.a 依赖于 libadhoc.a,因此编译行应该是:

gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc

你如何在automake中设置库的顺序?(或者可能是一种解决方法;您如何在编译行中重复所有库。这就是我在自定义 Makefile 中所做的。)

4

2 回答 2

9

从 Automake 手册(主要是§8.1.2但也有 §8.4):

PROG_LDADD不适合传递特定于程序的链接器标志(除了、 -l-L)。因此, 为此目的使用该变量。-dlopen-dlpreopenPROG_LDFLAGS

这意味着您可以(但实际上您应该)使用-land -Lin LDADD,而不是 in LDFLAGS。换句话说,您Makefile.am应该简单地阅读

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
myprog_LDFLAGS = -static 
于 2009-10-31T07:53:53.863 回答
2

automake 书中的一个想法(http://sources.redhat.com/autobook/autobook/autobook_92.html):从 libmine 和 libadhoc 创建一个便利库,并将 myprog 链接到它。

于 2009-10-30T13:56:10.657 回答