Что такое ladir в noinst_libfoo_ladir?

Я создал пример проекта под названием foo, его configure.ac выглядит следующим образом:

AC_PREREQ([2.69])
AC_INIT([foo], [1.0.0], [[email protected]])
AC_CONFIG_SRCDIR([foo.cpp])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign])
LT_INIT
AC_PROG_CXX
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

и его Makefile.am:

lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = foo.cpp
noinst_libfoo_la_DATA = test

Когда я запускаю autoreconf -i, я получаю:

Makefile.am:3: ошибка: «noinst_libfoo_la_DATA» используется, но «noinst_libfoo_ladir» не определен.

Что такое noinst_libfoo_ladir? Никак не могу найти документацию по этому поводу.


person qdii    schedule 21.01.2014    source источник


Ответы (1)


Ваша проблема в этой строке, как указано в ошибке:

noinst_libfoo_la_DATA = test

automake работает с этими суффиксами переменных, когда решить, как строить. Обратите внимание, что суффиксы, оканчивающиеся на _DATA, не входят в их число. Однако он распознает _DATA как установленный в определенном месте (например, data_DATA установлен в datadir). Таким образом, место, в которое будет установлено noinst_libfoo_la_DATA, будет находиться в переменной noinst_libfoo_ladir, определения которой нет в Makefile.am, отсюда и ошибка.

Так что ladir ничего. Это просто суффикс noinst_libfoo_la с dir, попытка найти неопределённую переменную. Тот же процесс, примененный к data_DATA, будет data (удалить суффикс _DATA) + dir = datadir. Чтобы не получить ошибку, вам нужно определить что-то вроде:

noinst_libfoo_ladir = $(datadir)/libfoo

в Makefile.am. Я бы назвал это как-то иначе, так как префикс noinst_ имеет особое значение для других вещей в автоинструментах (не устанавливать).

person ldav1s    schedule 22.01.2014
comment
Переменные _DATA упоминаются в руководстве. Хотя это оставляет много невысказанной информации, которая делает ошибку понятной. gnu.org/software/automake/manual/html_node/ - person Etan Reisner; 22.01.2014
comment
Ага, вторая ошибка - это просто моя глупая ошибка, исправлю в вопросе, чтобы народ не отвлекался - person qdii; 24.01.2014