1

私のプロジェクトには、C/C++ バイナリと共にインストール ルートにコピーされる一連の bash スクリプトがあります。

問題は、これらの BASH スクリプトをインストールする前に、それぞれに対してコマンドを実行する必要があることです。より具体的には、変数を autoconf 出力変数に置き換える必要があります。

 anyfile sed 's/ECLIPSE_PATH/@prefix@/g'

Makefile.am でスクリプトが定義されている場所は次のとおりです。

 bin_SCRIPTS = file1.sh file2.sh

これに対処する標準的な方法があるかどうか疑問に思います。そうでない場合は、それに対処するためのハックを用意したいと思います。ありがとう!

アップデート

私はそれを解決するためのハックを思いつきました.Automakeのレシピは次のとおりです:

install-data-hook:
  input_path="@prefix@";                          \
  path=$${input_path//\//\\/};                    \
  for i in @bindir@/*; do                         \
    if [[ ! `file $${i}` =~ "ELF" ]]; then        \                                                                                                                                                                  
      sed -i "s/\$$ECLIPSE_PATH/$${path}/g" $$i;  \
    fi                                            \
  done

しかし、それを行う標準的な方法があるかどうかはまだ疑問です

4

1 に答える 1

6

autoconf で検出された変数をスクリプトに代入することは、実際に行うのが通常のことです。通常、 を使用して行われAC_CONFIG_FILESます。

これを行う最も一般的な方法は、ソース ファイルに.inサフィックスを付けてから、.shautoconf を使用するように書き直すことです。何かのようなもの:

AC_CONFIG_FILES([script.sh:script.in], [chmod +x script.sh])

次に、ソース ファイルで@whatever@ECLIPSE_PATH.

ここで、インストール時にそれを実行したかったことに気付きました。しかし、通常、それは間違ったアプローチです。auto* の世界ではprefix、configure 時間と install 時間の間で変更することは実際には問題ありません。再設定する必要があります。

インストール時に本当にやりたいのであれば、あなたのアプローチはほぼ合理的だと思います。の内容をループすることbindirは、パッケージのユーザーにとって危険です。他のプログラムと一緒にツリーにインストールする場合はどうでしょうか? IMO、ループするほうがいい$(bin_SCRIPTS)です。

于 2015-03-20T14:52:35.860 に答える