Проблема с автоинструментами и созданием библиотеки С++

Я новичок в автоинструментах и ​​попытался написать пример. Я создаю одну библиотеку и связываю ее с другим объектом.

Моя проблема в том, что Makefile, сгенерированный для библиотеки, неправильно интерпретируется как код C, но на самом деле это C++. Если я заменю все вхождения ".c" на ".cpp" в сгенерированном Makefile, все будет хорошо.

Я использую libtool 2.4.2 и autoconf 2.69. Моя структура кода указана ниже:

test/
 - Makefile.am
 - configure.ac
 include/
  - mylib.hh
 src/
   hw/
    - Makefile.am
    - main.cpp
   mylib/
    - Makefile.am
    - mylib.cpp

Ниже мой Makefile.am верхнего уровня:

ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src/mylib src/hw

настроить.ac

AC_PREREQ([2.65])    
AC_INIT([hw],[1.0.0],[[email protected]])

# directories (relative to top-level) to look into for AutoConf/AutoMake files
AC_CONFIG_MACRO_DIR([m4])
# enable AutoMake
AM_INIT_AUTOMAKE([1.10])
# all defined C macros (HAVE_*) will be saved to this file
AC_CONFIG_HEADERS([config.h])

AC_PROG_CC
AM_PROG_CC_C_O

# Check if you have a C++ compiler
AC_PROG_CXX
AC_PROG_CXX_C_O

AC_PROG_INSTALL

## Initialize GNU LibTool
LT_INIT

AC_CONFIG_FILES([Makefile
             src/hw/Makefile
             src/mylib/Makefile])
AC_OUTPUT

src/hw/Makefile.am

ACLOCAL_AMFLAGS = -I m4
bin_PROGRAMS = hw

hw_SOURCES = main.cpp
AM_CPPFLAGS = -I$(top_srcdir)/include
hw_LDADD = $(top_srcdir)/src/mylib/libmylib.la

src/mylib/Makefile.am

ACLOCAL_AMFLAGS = -I m4
lib_LTLIBRARIES = libmylib.la
libmylib_la_sources = mylib.cpp
libmylib_la_CPPFLAGS = -I$(top_srcdir)/include

Ошибка, которую я получаю при запуске make:

make[2]: *** No rule to make target 'libmylib.c', needed by 'libmylib_la-libmylib.lo'.  Stop.

Еще раз, заменив «.cpp» на все вхождения «.c» в сгенерированном src/mylib/Makefile, код компилируется, компонуется и работает нормально. Любая помощь приветствуется.


person microwave    schedule 12.08.2014    source источник


Ответы (1)


Вы пробовали изменить:

libmylib_la_sources = mylib.cpp

to

libmylib_la_SOURCES = mylib.cpp

(ИСТОЧНИКИ в верхнем регистре)? m4 чувствителен к регистру.

person moorray    schedule 12.08.2014
comment
Это сделало это. Спасибо за решение и объяснение. - person microwave; 12.08.2014