1

私はlibdog-devD 言語でプログラミングするためのユーティリティ ライブラリを作成していMakefile.amます。

sited2dir = /usr/include/d2/site
lib32dir = ${libdir}/i386-linux-gnu
# lib64dir = ${libdir}/x86_64-linux-gnu

lib32_LIBRARIES = \
    i386/libdog.a

# lib64_LIBRARIES = \
#     x86_64/libdog.a

i386/libdog.a:
    mkdir -p i386
    dmd -lib -m32 -of$@ -op -Hdi386/include/ `find src/ -name '*.d'`

x86_64/libdog.a:
    mkdir -p x86_64
    dmd -lib -m64 -of$@ -op -Hdx86_64/include/ `find src/ -name '*.d'`

# Since the header files for i386/x86_64 are the same, let's just pick the i386 one.
install-data-hook: 
    mkdir -p $(DESTDIR)$(sited2dir)
    rsync -av i386-linux-gnu/include/ $(DESTDIR)$(sited2dir)

それは機能していますが、私はまだ不明です:

  • このプロジェクトには c/c++ ソースがないため、不要なはずの とAC_PROG_CCAC_PROG_RANLIB含める必要があります。configure.ac2 つのステートメントがない場合、エラーが発生します。

  • libdog.aにはシングルしか含めることができませんMakefile.am。上記のコードで x86-64 をコメントアウトしました。これを含めた場合、automake はエラーを表示します。

    cd . && /bin/bash /home/lenik/tasks/1-uni/devel/libdog-dev/missing --run automake-1.11 --gnu Makefile
    Makefile.am: object `libdog.$(OBJEXT)' created by `x86_64/libdog.c' and `i386/libdog.c'
    make: *** [Makefile.in] Error 1
    

    dmdDebianの公式パッケージと同様に、i386 と x86-64 の両方のバージョンを 1 つのパッケージに含めたいと考えています。

    ...                              (install tree of the dmd-2.059-0 package)
    |-- lib/
    |   |-- i386-linux-gnu/
    |   |   `-- libphobos2.a
    |   `-- x86_64-linux-gnu/
    |       `-- libphobos2.a
    
  • アーチ名i386-linux-gnux86_64-linux-gnuMakefile ソースをハードコーディングしましたが、何らかの方法で生成する必要があります..?

4

1 に答える 1

1
  1. _LIBRARIESAutomake は、ターゲットにリストされているファイルの C/C++ ソースを見つけようとします。したがって、それらを_DATAターゲットに変更するだけです:

    lib32_DATA = \
        i386/libdog.a
    
    lib64_DATA = \
        x86_64/libdog.a
    
  2. 次のコマンドを実行して、ホスト システムの名前i386-linux-gnuまたは名前を生成できます。x86_64-linux-gnu

    dpkg-architecture -qDEB_HOST_GNU_TYPE
    

    /etc/ld.so.confとからライブラリ パスを取得することもできます/etc/ld.so.conf.d/*

于 2012-10-17T11:36:00.037 に答える