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

Cra*_*enz 7 c automake autoconf gcc autotools

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

在我的文件中,我有类似的东西:

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la
myprog_LDFLAGS = -static -L/home/user/lib -ladhoc
Run Code Online (Sandbox Code Playgroud)

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

gcc -static myprog-myprog.o -o myprog -L/home/user/lib -ladhoc ./.libs/libmine.a
Run Code Online (Sandbox Code Playgroud)

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

gcc -static myprog-myprog.o -o myprog ./.libs/libmine.a -L/home/user/lib -ladhoc
Run Code Online (Sandbox Code Playgroud)

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

adl*_*adl 8

来自Automake手册(主要是§8.1.2,但也是§8.4):

PROG_LDADD是不合适的传递程序特定的连接标志(除-l,-L,-dlopen-dlpreopen).因此,PROG_LDFLAGS为此目的使用 变量.

这意味着你可以(但实际上你应该)使用-l,并-LLDADD,不是LDFLAGS.换句话说,你Makefile.am应该阅读

myprog_DEPENDENCIES = adhoc-target
myprog_SOURCES = myprog.c
myprog_LDADD = libmine.la -L/home/user/lib -ladhoc
myprog_LDFLAGS = -static 
Run Code Online (Sandbox Code Playgroud)