0

libtool をプログラムのソース ツリーにコピーして、プログラムと共に配布しました。しかし、「make distclean」を実行すると、libtool は生成された残りのファイルとともに削除されます。どうすればそれが起こらないようにできますか?

Makefile.amを入れてみEXTRA_DIST = libtoolましたが、うまくいきません。

基本的に、configure.ac は次のようになります。

AC_PREREQ(2.53)
AC_INIT( [program], [0.16], [program] )
AC_CONFIG_SRCDIR([src/c/program.c])
AC_CONFIG_HEADER([config.h])
AC_CONFIG_AUX_DIR(build-aux)
AM_INIT_AUTOMAKE( [-Wall -Werror foreign] )

m4_include(ax_pkg_swig.m4)

# Checks for programs.
AC_PROG_CC
AC_PROG_LIBTOOL
AC_ENABLE_SHARED
AC_PROG_SWIG

# Checks for libraries.

# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h string.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_SIZE_T

# Checks for library functions.
AC_REPLACE_FNMATCH
AC_FUNC_MALLOC
AC_FUNC_STAT
AC_CHECK_FUNCS([regcomp strdup strtoull])

AC_CONFIG_FILES([
    Makefile
    src/c/Makefile
    src/perl/Makefile
    src/verilog/Makefile
])
AC_OUTPUT
4

2 に答える 2

7

実際には、aclocal、libtoolize、autoheader などをすべて呼び出す必要はありません。

電話するだけ

$ autoreconf -i

autoreconf は、aclocal、libtoolize (configure.ac に libtool マクロがある場合)、automake (configure.ac に automake が含まれている場合)、および autoconf を実行します。ソース ツリーに追加する必要があるそれぞれのファイルはすべてそこにコピーされます。そのうちの ltmain.sh.2

私は通常、冗長性 (-v) を追加し、ファイルをコピーするだけでなく、それらをシンボリック リンクして、標準の呼び出しを行います。

$ autoreconf -vis

「configure」の実行によって生成された「libtool」ファイルは、configure の実行が行われたシステムに固有のものであるため、もちろん「make distclean」によって再びクリーンアップされます。

于 2009-10-13T14:28:49.210 に答える
3

libtoolプログラムのディレクトリに手動でコピーすることは想定されていません。これを処理するブートストラップ スクリプトで実行libtoolizeします。ファイルを削除してはならないことをautomakeに通知するなど、libtoolをコピーするだけではありません。ブートストラップ スクリプトの例を次に示します。

#!/bin/sh
aclocal -I config &&
    libtoolize --force --copy &&
    autoheader &&
    automake --add-missing --copy --foreign &&
    autoconf &&
    ./configure -C "$@"

このスクリプトは、伝統的にbootstrapまたはと呼ばれていますautogen.sh。これらの名前は普遍的ではありません。bootstrap.shほんの数日前、たとえばを使用したプロジェクトに出くわしました。

スクリプトの名前の大部分は、ファッションとスタイルの問題です。configure現代的なスタイルの一部は、スクリプトの最後で実行することから離れているため、完全に表面的なものではありません。は新しい名前であるため、最後bootstrapに実行される可能性が低い名前のスクリプトです。Autobook の第 8 章は、これも事実であることを暗示していますが、私は反例に出くわしました。(つまり、 を呼び出さないスクリプトを含むプロジェクトと、呼び出すスクリプトを含むプロジェクト。)configureautogen.shconfigurebootstrap

私の考えではconfigure、最後にステップを含めるかどうかの問題は、プロジェクトのユースケースがどれだけ典型的かということに帰着します。プロジェクトのビルド ツリーをブートストラップする必要があるほぼ全員がconfigure、ブートストラップ スクリプトで定義された標準フラグを受け入れるか、1 つまたは 2 つの単純なフラグを追加する場合は、configure自動的に実行しても問題ありません。多くの人が大量のカスタマイズを行う必要がある場合は、別の手動ステップにすることをお勧めします。たとえば、多くのユーザーがプロジェクトをクロスコンパイルしている場合です。これを実行するよう依頼configureする方法はよく知られていますが、ブートストラップ スクリプトのコードを読んで、埋め込まれたコマンドに渡されるオプションを取得する方法を理解する必要がありますconfigure

ほとんどの場合、このスクリプトをプロジェクトのニーズに合わせてカスタマイズする必要があります。そのままにしておかなければならない最も重要なことは、操作の順序です。Autotools はそれに敏感です。コマンドのフラグを変更する必要がある場合があります。たとえば、コマンドの は普遍的ではありません-I configaclocalこれらの一般的な手順を囲むか、場合によってはそれらに挟まれて、プロセスに手順を追加する必要がある可能性がさらに高くなります。

オプションに関しては、autoreconfまだファンになっていません。どういうわけか、その組み込みの仮定が私のすべてのプロジェクトで崩壊することがわかりました。プロジェクトがボグ標準の GNU スタイルのプロジェクトである場合は、うまくいく可能性があります。

ちなみに、AC_PROG_LIBTOOLマクロは廃止されています。LT_INIT代わりに使用する必要があります。

于 2009-09-17T15:37:45.937 に答える