我在Eclipse中有一个使用Autoconf和Automake的C ++项目。我的(简化的)项目结构如下:

+-- Makefile.am
+-- configure.ac
+-- src/
|   +-- 4Bench.cpp
|   |   +-- Makefile.am
|   |   +-- folder1/
|   |   |   +-- ...
|   |   +-- folder2/
|   |   |   +-- ...
|   |   +-- folder3/
|   |   |   +-- ...
+-- include/
|   +-- ...


文件夹src /将包含多个二进制文件(4Bench.cpp是其中的一种),这些二进制文件将使用位于folder1,folder2等中的.cpp文件。所有头文件均位于include /中。我的src / Makefile.am如下所示:

bin_PROGRAMS=4Bench
4Bench_SOURCES=4Bench.cpp folder1/file11.cpp folder2/file21.cpp ...
4Bench_CPPFLAGS=-I$(top_srcdir)/include
AM_CPPFLAGS=$(BOOST_CPPFLAGS)
AM_LDFLAGS=$(BOOST_LDFLAGS)
4Bench_LDADD=$(BOOST_PROGRAM_OPTIONS_LIB)


由于我期望src /的子文件夹中有许多文件,因此我想使用通配符来实现以下功能:

4Bench_SOURCES=4Bench.cpp $(wildcard folder1/*.cpp) $(wildcard folder2/*.cpp) $(wildcard folder3/*.cpp)


不幸的是,这导致了一系列“未定义引用”形式的错误,也就是说,编译器无法在.cpp文件中找到类的实现。枚举二进制文件所需的每个文件。作为进一步参考,我同时提供了./configure.ac和./Makefile.am文件。

./configure.ac

AC_PREREQ(2.59)
AC_INIT(4Bench, 0.1)
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE([-Wall -Werror foreign subdir-objects -Wno-portability])
AC_PROG_CXX
AC_CONFIG_MACRO_DIR([m4])
AX_CXX_COMPILE_STDCXX_11
AX_BOOST_BASE([1.32],,[AC_MSG_ERROR([4Bench needs Boost, but it was not found in your system])])
AX_BOOST_PROGRAM_OPTIONS
AX_BOOST_UNIT_TEST_FRAMEWORK
AC_CONFIG_FILES(Makefile src/Makefile test/Makefile)
AC_OUTPUT


./Makefile.am

SUBDIRS=src test
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} -I m4
EXTRA_DIST = bootstrap


关于如何解决此问题的任何想法?我正在将Linux Mint 18与g ++ 5.4.0,autoconf 2.69和GNU automake 1.15一起使用。感谢您的关注和帮助!

最佳答案

关于如何解决此问题的任何想法?


当前的automake实现无法做到这一点。 This is a feature

关于c++ - 具有autoconf和automake的通配符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45044850/

10-10 05:19