您需要将头文件添加common_include
到您的 SOURCES 某处。否则它们将不会被打包在 tarball 中make dist
。在这种情况下make distcheck
应该失败。正如我在评论中所说,我认为make distcheck
确实失败了。您应该在您的工作目录中查看相关证据。可能会有一个目录_build
和一个目录_inst
,并且可能还有一个my-project-1.0
不属于您的目录结构的目录。
编辑:这是我的做法:
配置.ac
AC_PREREQ([2.62])
AC_INIT([my-project], [1.0.0], [my-project@example.com], [my-project])
AC_CONFIG_SRCDIR([subdir1/foo.cc])
LT_PREREQ([2.2.4])
AC_CANONICAL_SYSTEM
AM_INIT_AUTOMAKE
LT_INIT
AC_PROG_CXX
AC_PROG_MAKE_SET
AC_SUBST([LIBTOOL_DEPS])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
典型的样板文件。没什么可看的,除了 C++ 编译器。
生成文件.am
AUTOMAKE_OPTIONS = 1.11 外国
bin_PROGRAMS = baz
lib_LTLIBRARIES=libfoo.la libbar.la
baz_SOURCES=$(top_srcdir)/subdir3/baz.cc \
$(top_srcdir)/common_include/bar.hpp \
$(top_srcdir)/common_include/foo.hpp
baz_CXXFLAGS=-I$(top_srcdir)/common_include
baz_LDADD=libfoo.la libbar.la
libfoo_la_CXXFLAGS=-I$(top_srcdir)/common_include
libfoo_la_SOURCES=$(top_srcdir)/subdir1/foo.cc \
$(top_srcdir)/common_include/foo.hpp
libbar_la_CXXFLAGS=-I$(top_srcdir)/common_include
libbar_la_SOURCES=$(top_srcdir)/subdir2/bar.cc \
$(top_srcdir)/common_include/bar.hpp
制作了两个库和一个依赖于它们的程序,并带有common_include
. 为了打包东西,您实际上只需要为某个对象引用一次头文件。我总是明确列出它们,主要是为了记录它们。autoconf 系统足够智能,可以为标头构建正确的依赖关系。
如果您想知道,make distcheck
确实有效:
我的项目-1.0.0.tar.gz
我的项目 1.0.0/
我的项目 1.0.0/ltmain.sh
我的项目-1.0.0/configure.ac
我的项目-1.0.0/安装-sh
我的项目 1.0.0/缺失
我的项目-1.0.0/subdir2/
我的项目-1.0.0/subdir2/bar.cc
我的项目-1.0.0/subdir3/
我的项目-1.0.0/subdir3/baz.cc
我的项目 1.0.0/Makefile.in
我的项目-1.0.0/subdir1/
我的项目-1.0.0/subdir1/foo.cc
我的项目 1.0.0/common_include/
我的项目-1.0.0/common_include/bar.hpp
我的项目-1.0.0/common_include/foo.hpp
我的项目-1.0.0/config.sub
我的项目 1.0.0/配置
我的项目 1.0.0/config.guess
我的项目-1.0.0/aclocal.m4
我的项目 1.0.0/Makefile.am
我的项目 1.0.0/depcomp