2

私はautotoolsを学んでいます。私のトップレベルのディレクトリ構造はこのようなものです

Sample--
        src
        test
        inc

ここで、 srcにはソース ファイルが含まれ、incにはインクルード ファイルが含まれ、testにはテスト スイートのファイルが含まれます。srcにいくつかのライブラリを必要とするテスト スイートを書きたいとします。automake でSUBDIRSオプションを使用して Makefile.am を記述する方法を教えてください。

4

1 に答える 1

3

ヘッダー用に別のディレクトリを作成するというアイデアに、私はこれまで納得したことがありません。それはさておき、変数src Makefile.amを単純に使用できます。AM_CPPFLAGS

AM_CPPFLAGS = -I$(top_srcdir)/inc # and other preprocessor flags.
lib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES = file_1.c file_2.c ... ../inc/file_1.h ../inc/file_2.h ...

理想的には、ヘッダーをlibfoo_la_SOURCES変更するとソース ファイルの再コンパイルが必要になるため、上記のようにヘッダーも含めることをお勧めします。ヘッダーをディレクトリに配置することで、、 などをプライマリにsrc簡単にリストできます。file_1.hfile_2.hSOURCES

-I$(srcdir)は既に自動的に提供されるためAM_CPPFLAGS、ヘッダーがフォーム<file_1.h>またはに含まれていれば、このオプションを に追加する必要はありません"file_1.h"

さらに、以下を に追加することにより、ヘッダーがインストールされますsrc/Makfile.am

libfoo_includedir = $(includedir)
libfoo_include_HEADERS = file_1.h file_2.h ...

最小限のトップレベルは次のMakefile.amようになります。

ACLOCAL_AMFLAGS = -I m4 --install # AC_CONFIG_MACRO_DIR([m4]) in configure.ac
SUBDIRS = src tests # depth-first ordering of build.

これにより、次のことがわかりtest/Makefile.amます。

AM_CPPFLAGS = -I$(top_srcdir)/src # or $(srcdir)/../src
check_PROGRAMS = foo_test
foo_test_SOURCES = foo_test.c
foo_test_LDADD = $(top_builddir)/src/libfoo.la

-の使用に注意してください。'out top_builddir-of-tree' を構築できるようにしたいのです。

最後に、次の形式のヘッダーを使用してライブラリを構築することを検討してください<foo/file_1.h>。主要なディレクトリはライブラリヘッダーに一種の「名前空間」を提供するため、これはより良いアプローチだと思います。例えば、

libfoo_includedir = $(includedir)/foo # in foo/Makefile.am

AM_CPPFLAGS = -I$(top_srcdir) # in test/Makefile.am
于 2013-09-13T07:53:00.843 に答える