你需要在某個地方common_include
添加的頭文件到你的源代碼。否則,他們將不會被包裝在make dist
的壓縮包中。在這種情況下,make distcheck
應該失敗。正如我的評論所述,我認爲make distcheck
確實失敗。你應該檢查你的工作目錄中的證據。可能有一個目錄_build
和一個目錄_inst
,可能是一個目錄my-project-1.0
不屬於你的目錄結構的一部分。
編輯:這就是我想要做的:
configure.ac
AC_PREREQ([2.62])
AC_INIT([my-project], [1.0.0], [[email protected]], [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++編譯器外,沒什麼可看的。
Makefile.am
AUTOMAKE_OPTIONS = 1.11 foreign
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的
my-project-1.0.0/
my-project-1.0.0/ltmain.sh
my-project-1.0.0/configure.ac
my-project-1.0.0/install-sh
my-project-1.0.0/missing
my-project-1.0.0/subdir2/
my-project-1.0.0/subdir2/bar.cc
my-project-1.0.0/subdir3/
my-project-1.0.0/subdir3/baz.cc
my-project-1.0.0/Makefile.in
my-project-1.0.0/subdir1/
my-project-1.0.0/subdir1/foo.cc
my-project-1.0.0/common_include/
my-project-1.0.0/common_include/bar.hpp
my-project-1.0.0/common_include/foo.hpp
my-project-1.0.0/config.sub
my-project-1.0.0/configure
my-project-1.0.0/config.guess
my-project-1.0.0/aclocal.m4
my-project-1.0.0/Makefile.am
my-project-1.0.0/depcomp
我不相信'make distcheck'成功完成。它可能會創建檔案(第一階段),但如果它需要構建的頭文件沒有包含在tarball中,我認爲'make distcheck'實際上沒有錯誤地完成。如果是這樣,我會向autoconf人員報告一個錯誤。 – ldav1s 2013-02-19 18:40:11