Я создал пример проекта под названием 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
? Я не могу найти документацию по этому вопросу.
Ваша проблема в этой строке, как указано в ошибке:
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_
Префикс имеет особое значение для других вещей в автоинструментах (не устанавливать).
Других решений пока нет …