Как настроить LDFLAGS для библиотеки "noinst" с помощью Automake?
Предположим, я разработал libfoo.a как промежуточный этап в процессе компиляции. Вот строка для этого в Makefile.am:
noinst_LIBRARIES = libfoo.a
Эта библиотека зависит от других библиотек. Чтобы предотвратить получение неопределенных ошибок ссылок, мне нужно настроить переменную LDFLAGS. Вот что я сделал:
libfoo_a_LDFLAGS = `pkg-config --ldflags some_lib`
Тем не менее, automake не удается с этим сообщением:
variable `libfoo_a_LDFLAGS` is defined but no program or library has `libfoo_a` as canonical name (possible typo)
Что я здесь не так делаю? Это работает для libfoo_a_SOURCES и _CFLAGS.
1 ответ
Это невозможно сделать с помощью простой промежуточной библиотеки *.a. Это потому, что промежуточная библиотека никогда не связана, поэтому LDFLAGS
не имеет смысла для этого. Промежуточная библиотека - это просто архивный архив, представляющий собой набор объектных файлов. В архиве архива нет места для записи флагов, которые нужно было бы использовать для связывания конечного объекта.
Нормальное решение - сделать то, что предлагает Уильям Перселл: добавить необходимое LDFLAGS
до конечных исполняемых файлов или общих библиотек, которые вы создаете в процессе сборки.
Другой возможностью является сборка промежуточных библиотек в виде библиотек libtool *.la, даже если вы собираетесь использовать их только в качестве промежуточных библиотек. Когда вы сделаете это, система сборки сгенерирует общий объект (который вы в итоге не будете использовать, поскольку вы объедините базовые объектные файлы в фактический артефакт сборки), но, что более важно, он создаст файл *.la, который имеет место для записи такого рода информации о зависимостях. Руководство Automake называет это "удобной библиотекой Libtool". Для этого вам, конечно, нужно использовать libtool и переключиться на вызов этого libfoo.la
в вашем Makefile.am
и перечислите это в noinst_LTLIBRARIES
, Но если вы уже используете libtool, это, вероятно, больше проблем, чем оно того стоит.