0

configure.ac で Erlang ライブラリを確認する必要がありますが、erlang アプリのリストは別のファイルにあり、プログラムを実行してそのリストを抽出する必要があります。

通常、私はこれを行うことができます:

AC_ERLANG_CHECK_LIB([app1])
AC_ERLANG_CHECK_LIB([app2])

ただし、実際のアプリは別のファイルにあるため (configure.ac でそれらを繰り返したくないため、次の行に沿ってどこかで実行することを考えていました。

DEPS=`some command that gets app1, app2`
# DEPS=app1 app2

m4_foreach_w(dep, "$DEPS", [AC_ERLANG_CHECK_LIB([dep])])

[app1 app2] のような実際の値が必要なので、ここでは "$DEPS" が間違った引数であることはわかっています。また、DEPS 変数の評価は ./configure が呼び出されるまで行われないことも知っていますが、m4_foreach_w には事前に DEPS の値が必要です。

これを解決する方法はありますか?

4

2 に答える 2

1

あなたは試すことができます:

m4_foreach_w(dep, m4_esyscmd([some command that generates list]),
       [AC_ERLANG_CHECK_LIB(dep)])

これは悪い考えだと思いますが、潜在的な落とし穴について詳しく説明することはできません。私だったら、依存関係をハードコーディングするかconfigure.ac、スクリプトで生成することを好みます。

于 2013-01-08T17:51:09.513 に答える
0

このアプローチはあなたにとって完全にやり過ぎかもしれませんが、私はそれについて説明します。

プログラムを実行してリストを取得するときは、出力をGNU Autogen .def ファイル形式に変更します。

elib.def

autogen 定義 elib;

elib = { name="app1"; };
elib = { name="app2"; };

autogen次に、次のようなテンプレート ファイルで呼び出します。

gen.tpl

[+ autogen5 テンプレート
m4=%s.m4
(setenv "SHELL" "/bin/sh") +]#
[+ (dne "# " "# ") +]
# マクロのコメント
AC_DEFUN([CHECK_MY_ELIBS],
[
[+
FOR elib "\n" +]AC_ERLANG_CHECK_LIB([[+name+]])[+ENDFOR+]
]))

これはマクロ elib.m4 を出力します:

...
# マクロのコメント
AC_DEFUN([CHECK_MY_ELIBS],
[
AC_ERLANG_CHECK_LIB([アプリ1])
AC_ERLANG_CHECK_LIB([app2])
]))

configure.acに elib.m4をインストールした後、次に CHECK_MY_ELIBS を呼び出しますAC_CONFIG_MACRO_DIR

もちろん、他の手段 (perl、python など) で elib.m4 を生成することもできますが、これはそれほど難しくありません。

于 2013-01-08T19:36:44.860 に答える