我是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”,代码编译,链接并运行正常。任何帮助表示赞赏。
答案 0 :(得分:1)
您是否尝试过更改:
libmylib_la_sources = mylib.cpp
到
libmylib_la_SOURCES = mylib.cpp
(大写SOURCES)? m4区分大小写。