Библиотека построения ошибок Automake - фантомный файл

Я добавляю функции автоинструментов в личную библиотеку, но у меня есть некоторые проблемы. Уточняю, что автоинструменты для меня совершенно новые.

.
|-- Makefile.am
|-- configure.ac
`-- socket++
    |-- Makefile.am
    |-- base_socket.cpp
    |-- base_socket.hpp
    |-- client.cpp
    |-- client.hpp
    |-- config.h
    |-- config.h.in
    |-- refcount++.hpp
    |-- server.cpp
    |-- server.hpp
    |-- server.imp.hpp
    `-- types
        |-- Makefile.am
        |-- simple_socket.cpp
        |-- simple_socket.hpp
        |-- simple_socket_stop.cpp
        |-- simple_socket_stop.hpp
        |-- text_buffered.hpp
        `-- text_buffered.imp.hpp

Вот configure.ac

AC_INIT([socket++], [1.2], [[email protected]], [socket++], [http://dev.xif.fr/socketxx])
AM_INIT_AUTOMAKE([foreign -Wall])
AC_CONFIG_HEADERS([socket++/config.h])
AC_CONFIG_SRCDIR([socket++/base_socket.cpp])
AC_CONFIG_FILES([Makefile socket++/Makefile socket++/types/Makefile])
AC_CONFIG_MACRO_DIR([m4])

# Distribute additional compiler and linker flags
AC_SUBST([AM_CXXFLAGS])
AC_SUBST([AM_LDFLAGS])

# Checks for compilers
AC_PROG_CXX
AC_PROG_CC
AX_CXX_COMPILE_STDCXX_11

# Libtool
LT_INIT
LT_LANG([C++])

# Checks for header files
AC_CHECK_HEADERS([arpa/inet.h inttypes.h netdb.h netinet/in.h stddef.h sys/ioctl.h sys/socket.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics
AC_C_INLINE
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T

# Checks for library functions
AC_FUNC_ERROR_AT_LINE
AC_CHECK_FUNCS([gethostbyname inet_ntoa select socket strerror])

AC_OUTPUT

Вот socket++/Makefile.am

AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
AM_CXXFLAGS = -I$(top_srcdir)/socket++ @AM_CXXFLAGS@
ACLOCAL_AMFLAGS = -I m4

SUBDIRS = types

lib_LTLIBRARIES = libsocket++.la
library_includedir=$(includedir)/socket++
library_include_HEADERS = refcount++.hpp base_socket.hpp client.hpp server.imp.hpp server.hpp
libsocket++_la_SOURCES = base_socket.cpp client.cpp server.cpp
socket++_libincludedir = $(libdir)/socket++/include
nodist_socket++_libinclude_HEADERS = config.h
libsocket++_la_LIBADD = types/libsocket++types.a

И, наконец, socket++/types/Makefile.am

noinst_lib_LTLIBRARIES = libsocket++types.la
library_includedir=$(includedir)/socket++/types
library_include_HEADERS = simple_socket_stop.hpp simple_socket.hpp text_buffered.imp.hpp text_buffered.hpp
libsocket++types_la_SOURCES = simple_socket_stop.cpp simple_socket.cpp

С ./configure все в порядке, но когда я make, у меня такая ошибка:

make[3]: Entering directory '/root/socket++/socket++/types'
make[3]: *** No rule to make target 'libsocket++types.c', needed by 'libsocket++types.lo'.  Stop.

Это странно, потому что libsocket++types.cникогда не определялось в libsocket++types_la_SOURCES

Я искал некоторое время, но ничего не нашел о файле фантомов, подобном этому. Заранее спасибо за помощь !


person Félix Faisant    schedule 14.12.2013    source источник


Ответы (1)


Есть всего несколько проблем с использованием <prefix>_ основных цветов:

lib_LTLIBRARIES = libsocket++.la приводит к имени производной переменной от libsocket__

libsocket___includedir = $(includedir)/socket++
libsocket___include_HEADERS = ...
libsocket___la_SOURCES = ...

Вы также можете поместить заголовочные файлы в список _SOURCES. то есть, если заголовок изменен, make увидит, что библиотека или другие зависимые элементы должны быть перекомпилированы.

То, что вы назвали «фантомной» целью, обычно называется библиотека для удобства, где: libsocket++types.la преобразуется в префикс libsocket__types_. Родительский Makefile.am должен добавить включаемые пути к AM_CPPFLAGS. Поскольку subdirs будет происходить первым, вы можете добавить вспомогательную библиотеку с помощью:

libsocket___la_LIBADD = types/libsocket++types.la

Кроме того, это noinst_LTLIBRARIES не noinst_lib_LTLIBRARIES.

person Brett Hale    schedule 15.12.2013
comment
Я думал, что это проблема, связанная с символом «+». Это было правильно. И я назвал "фантомный" файл libsocket++types.c, потому что он не существует. Спасибо за помощь - person Félix Faisant; 17.12.2013