关于自动工具和生成c++库的问题

Issue with autotools and generating a c++ library

本文关键字:c++ 问题 于自动 工具      更新时间:2023-10-16

我是autotools的新手,并试图编写一个示例。我正在创建一个库,并将其链接到另一个对象。

我的问题是,为库生成的Makefile似乎被误解为C代码,但实际上是c++。如果我将生成的Makefile中出现的"。c"全部替换为"。cpp",则一切正常。

我使用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

configure.ac

AC_PREREQ([2.65])    
AC_INIT([hw],[1.0.0],[foo.bar@example.com])
# 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.

同样,在生成的src/mylib/Makefile中,用".cpp"代替所有出现的".c",代码编译、链接并运行良好。

你试过改变:

libmylib_la_sources = mylib.cpp

libmylib_la_SOURCES = mylib.cpp

(大写的SOURCES)?M4是区分大小写的