0

「./configure」などで管理されているプロジェクトからサブディレクトリを移動すると、「../../configure.ac」などに到達しようとし、簡単にビルドできません。

そのようなプロジェクトの一部を抽出して独立させる方法は?

4

1 に答える 1

0

これに対処するには 2 つの方法があります。別の自動ツール ビルド プロセスを作成するか、自動ツールとハンド コードを廃止するか、新しいMakefile.

私のプロジェクトフー
   | |
   +-- ソース
   | |
   +-- 男
   | |
   +-- メッセージ
   | |
   +-- ライブラリ
   | |
   +-- 含める
   | |
   +-- その他

という架空のプロジェクトについては、上の図を見てmyprojectfooくださいfoo。最上位のディレクトリmyprojectfooにはconfigure.acMakefile.amMakefile.inがあり、サブディレクトリには少なくともMakefile.amMakefile.inがあります。自動ツールは、make コマンドを作成して実行し、プロジェクトをビルドします。

今、あなたがやろうとしていることで私が理解していることから:

私のプロジェクトフー
   | | \ /
   +-- sXc
   | | / \
   +-- 男
   | |
   +-- メッセージ
   | |
   +-- ライブラリ
   | | \ /
   +-- 含む
   | | / \
   +-- その他

srcサブディレクトリを取り出したいのですが、それinclude'sもそうです。その場合、別の Makefile ( read - no auto-tools ) ビルドを作成する方が簡単です..その場合、簡単です。

私が考えることができる最善の方法は、最終的にその決定を下す必要があることです。抽出したいプロジェクトのソースのサブセットの大きさはどれくらいですか。それを進めたら、 Makefile.am、 Makefileへのすべての参照を削除します。 in ... 既存の単純な Makefile テンプレートを借りてビルドし、このように呼び出します

make -f MyMakefile

また

自動ツールを使用してそのサブセットを使用して別のプロジェクトをビルドする場合:

  1. Makefile.am以下に示すように、ベアボーンを作成します。
  2. configure.ac以下に示すように、ベアボーンを作成します...
  3. ソースで自動スキャンを実行して依存関係を選択し、出力ファイル「configure.scan」の結果をconfigure.ac
  4. automakeを実行します(一度実行してください!)
  5. 次にautoconfを実行します。INSTALL、COPYING などの欠落ファイルについて不平を言う場合があります。
  6. その後、 への変更があれば、その後autoreconfを実行しconfigure.acます。これにより、 automakeautoconf、およびその他のサポートされている自動ツール プログラムが実行されます。

Linux 用のサンプルを取得してMakefile.amいます...

サブディレクトリ = src インクルード
ACLOCAL_AMFLAGS = -I m4

Linux 用のサンプルを取得してconfigure.acいます...

AC_PREREQ(2.63)

AC_INIT([mysubsetprojectfoo], [0.1a], [foo@bar.baz])
AC_CONFIG_AUX_DIR([build-aux])

AM_INIT_AUTOMAKE([-Wall -Werror])
AM_GNU_GETTEXT_VERSION([0.17])
AM_GNU_GETTEXT([外部])
AM_CFLAGS=
# プログラムをチェックします。
AC_HEADER_STDC
AC_PROG_CC

AC_ARG_ENABLE([デバッグ],
[ --enable-debug デバッグを有効にする],
[case "${enableval}" in
  はい) debug=true ;;
  いいえ) デバッグ = false ;;
  *) AC_MSG_ERROR([--enable-debug の不適切な値 ${enableval}]) ;;
esac],[debug=false])
AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
# ライブラリをチェックします。
AC_CHECK_LIB([mylib], [mylib_function], [:])
if test "$mylib" = :; それから
        AC_MSG_ERROR([MyLib がありません。\
                                  これは「http://www.foo.baz」からダウンロードできます])
フィ
AC_CONFIG_HEADERS([config.h])

# ヘッダー ファイルをチェックします。
# FROM ソース ディレクトリで 'autoscan' を実行
AC_CHECK_HEADERS([arpa/inet.h fcntl.h libintl.h locale.h netinet/in.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h])

# typedef、構造、およびコンパイラの特性をチェックします。
AC_C_INLINE
AC_C_CONST
AC_TYPE_SIGNAL
AC_TYPE_PID_T
AC_TYPE_UID_T
AC_TYPE_SIZE_T

# ライブラリ関数をチェックします。
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_CHECK_FUNCS([atexit inet_ntoa memset regcomp socket strdup strerror])

AC_CONFIG_FILES([メイクファイルソース/メイクファイルインクルード/メイクファイル])
AC_OUTPUT

auto-tools のコマンドは、私の頭の一番上にあり、何かを見逃している可能性があります。この投稿の最後にコメントを付けて指摘してください。それに応じて修正されます。

于 2010-05-24T16:12:28.833 に答える