2

私のプロジェクトは次のように構成されています:

/ subdir1 subdir2 subdir3 common_include

各サブディレクトリは、プロジェクトのさまざまなバイナリとライブラリをコンパイルします。common_include には、すべてのサブディレクトリに含まれる .h (C++ ヘッダー) が含まれます。

これらのヘッダー ファイルは、SOURCES 属性の各 Makefile.am には追加されません。しかし、次のパス -I../common_include を CPPFLAGS 属性に追加します

構成には GNU ビルド システムを使用します。すべてが機能しています。

しかし、my-project-1.0.tar.gz を作成するために make distcheck と入力してプロジェクトをリリースしたい場合、アーカイブは正常に作成されます。

ただし、すべてのサブディレクトリが含まれており、common_include ディレクトリは含まれていません。したがって、最終ユーザーはコンパイルできません..

助けはありますか?

ありがとうございました

4

2 に答える 2

2

ヘッダーファイルをcommon_includeSOURCESのどこかに追加する必要があります。それ以外の場合は、のtarballにパッケージ化されません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]、[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 ++コンパイラを除いて、あまり見ることはありません。

Makefile.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

2つのライブラリと、にヘッダーを付けてそれらに依存するプログラムを作成しましたcommon_include。物事をパッケージ化するために、あなたは実際にいくつかのオブジェクトのために一度だけヘッダーファイルを参照する必要があります。私は常に、主にそれらを文書化するためにそれらを明示的にリストします。autoconfシステムは、ヘッダーの正しい依存関係を構築するのに十分スマートです。

あなたが疑問に思ってmake distcheckいた場合、実際に機能します:

my-project-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
于 2013-02-19T18:43:20.920 に答える