Linux、Ubuntu 10.04 を実行しています。
autotools を使用するのは初めてではありません。私は多くの調査を行い、多くのチュートリアルに従いました。これが私がやりたいこと、私が試したこと、そして私が直面している問題です。
目標:
- libtool、autoconf、およびautomakeを使用して、Cでコーディングされた自分のライブラリをコンパイルします(そしてクロスコンパイルしますが、これは別の仕事になります)
私が試したことと私がいる場所:
ライブラリ名は FXPLib、パッケージ名は libfxplib-0.1 です。
私のプロジェクトフォルダーは次のとおりです。
Makefile.am (the only one) include include/fxplib.h (main header) include/FXPLib include/FXPLib/header1.h (these are public headers) include/FXPLib/header2.h include/FXPLib/... src src/sub1/file1.c src/sub2/file1.c src/sub3 ...
自動スキャンを実行し、configure.ac を取得して、次のように編集しました。
# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.65]) AC_INIT([libfxplib-0.1], [0.1], [<>]) AC_CONFIG_SRCDIR([src/object_system/FXP_image_s.h]) AC_CONFIG_HEADERS(config.h) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE AM_PROG_LIBTOOL LT_PREREQ([2.2]) LT_INIT # Checks for programs. AC_PROG_CC AC_PROG_MAKE_SET # Checks for libraries. # Checks for header files. AC_CHECK_HEADERS([stdlib.h]) # Checks for typedefs, structures, and compiler characteristics. AC_HEADER_STDBOOL # Checks for library functions. AC_FUNC_MALLOC AC_FUNC_REALLOC AC_CHECK_FUNCS([memset]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT
私は次のように Makefile.am を書きました:
lib_LTLIBRARIES = libfxplib-0.1.la libfxplib_0_1_la_CFLAGS = -I$(srcdir)/include -I$(srcdir)/include/FXPLib `sdl-config --cflags --libs` -lSDL_image libfxplib_0_1_la_SOURCES = src/sub1/file1.c \ src/sub1/file2.c \ src/sub2/file1.h \ ... nobase_include_HEADERS = include/fxplib.h \ include/FXPLib/header1.h \ include/FXPLib/header2.h \ ... ACLOCAL_AMFLAGS = -I m4
- 次に、 aclocalとautoheaderを実行して、automake に必要なファイルを取得しました。
- 次に最も重要な: autoconf
- そして: automake --add-missing --copy
そこから、すべてがOKです。しかし、私はコンパイルしようとします:
$ ./configure
こちらも全てOK...
$ make
そして、私は得る:
...
src/graphics_engine/FXP_rendering.c:35:25: error: FXP_image_s.h: File not found
...
どこ :
- 「graphics_engine」はsrc/ subに相当します
- 「FXP_rendering.c」をsrc/sub/ file.cに
- src/sub2/ header.hに「FXP_image_s.h」
つまり、automake はサブディレクトリの .c ファイルをコンパイルできますが、これらのファイルに他のサブディレクトリにあるプライベート .h ファイルを含めることはできません。
私の問題は次のとおりです。すべてのサブディレクトリ内のすべてのファイルを、すべて同じ場所にあるかのようにコンパイルするようにautomakeに指示する方法は?
私が理解できることを願っています(私はフランス人なので、私の言葉にいくつかの問題があることをお詫びします)
よろしくお願いします。