5

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
    
  • 次に、 aclocalautoheaderを実行して、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に指示する方法は?

私が理解できることを願っています(私はフランス人なので、私の言葉にいくつかの問題があることをお詫びします)

よろしくお願いします。

4

1 に答える 1

8

およびファイルはconfigure.acMakefile.am学習に多大な努力を払ったに違いないように見えます。おめでとう!便利なヒントの 1 つは、、、、 などautoreconfのチェーン全体の代わりに実行できることです。aclocalautoheaderautoconfautomake

この場合の問題は、実際には autotools ではなく、C コンパイラ自体にあります。プロジェクトのルート ディレクトリでコンパイラを実行してファイルをコンパイルしていますがsrc/subsrc/sub2現在のディレクトリでもインクルード パスでもないため、コンパイラは実行しません。どこにあるかわかりません。

の行に追加-I$(srcdir)/src/sub2してみてください。これにより、インクルード パスが変更され、コンパイラが でヘッダー ファイルを検索するように指示されるため、別のディレクトリで使用されるヘッダー ファイルを含むすべてのディレクトリに対して同様の指示を追加する必要があります。libfxplib_0_1_la_CFLAGSMakefile.amsrc/sub2sub

于 2011-03-13T11:17:37.010 に答える