Как вы устанавливаете порядок библиотек в automake? - PullRequest
7 голосов
/ 30 октября 2009

Как установить порядок библиотек в 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.)

Ответы [ 2 ]

8 голосов
/ 31 октября 2009

Из руководства 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 
2 голосов
/ 30 октября 2009

Одна идея из книги automake (http://sources.redhat.com/autobook/autobook/autobook_92.html):) создайте вспомогательную библиотеку из libmine и libadhoc и свяжите myprog с этим.

...