2009-10-30 3 views
6

Как вы устанавливаете порядок библиотек в automake?Как вы устанавливаете порядок библиотек в automake?

В моем утра файл у меня есть что-то вроде:

myprog_DEPENDENCIES = adhoc-target 
myprog_SOURCES = myprog.c 
myprog_LDADD = libmine.la 
myprog_LFLAGS = -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? (Или, может быть, работа вокруг, как вы повторяете все библиотеки в строке компиляции. Это то, что я делаю в своих собственных Makefiles.)

ответ

6

От руководства Automake (в основном §8.1.2, но и §8.4):

PROG_LDADD является неподходящим для прохождения конкретных программ флагов компоновщика (для -l, -L, -dlopen и -dlpreopen за исключением). Итак, используйте переменную PROG_LDFLAGS для этой цели .

Это означает, что вы можете (но на самом деле вы должны) использовать -l и -L в LDADD, а не в LDFLAGS. Другими словами, ваш Makefile.am должен просто читать

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

, что не работает ни –

+0

Как это может не работать? Какую команду вы получаете? – adl

+0

Это разрешило почти идентичную проблему, с которой я столкнулся с libgcrypt. Благодаря! – cmyers

Смежные вопросы