c++ - 自动工具问题和生成 C++ 库

标签 c++ makefile autotools autoconf libtool

我是 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

配置文件

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.

再一次,用“.cpp”替换生成的 src/mylib/Makefile 中所有出现的“.c”,代码编译、链接和运行良好。感谢您的帮助。

最佳答案

您是否尝试过更改:

libmylib_la_sources = mylib.cpp

libmylib_la_SOURCES = mylib.cpp

(大写来源)? m4 区分大小写。

关于c++ - 自动工具问题和生成 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255157/

相关文章:

c++ - 将 C++ 代码从一个程序转移到另一个程序

c++ - 按位运算符和整数提升是怎么回事?

从不同目录编译相同的 c 程序会生成不同大小的目标代码

c++ - autotools undefined reference 错误

c++ - 如果我们声明一个由四个元素组成的数组,这些元素可以存储值吗?

c++ - Gale Shapley 算法的实现有问题

c++ - 即使包含库也无法将 curlpp 与 Xcode 一起使用

c - 使用 -g 在 ArchLinux 中找不到调试符号

llvm - 构建 LLVM 位代码的自动工具软件

makefile - 使用 autotools 仅构建一小部分项目