ヘッダー用に別のディレクトリを作成するというアイデアに、私はこれまで納得したことがありません。それはさておき、変数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.h
file_2.h
SOURCES
-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