0

プロジェクトの autoconf で Makefile.am を自動的に検索するシェル コマンドをいくつか追加しようとしています (新しい Makefile.am があるときに、次にエントリを追加するのを忘れる心配がないように)。しかし、うまくいかないようです。問題を説明するために、最小限のプロジェクト設定を作成しようとしました。プロジェクト ディレクトリには以下が含まれます。

├── AUTHORS
├── ChangeLog
├── common.mk.in
├── configure.ac
├── COPYING
├── INSTALL
├── install-sh
├── Makefile.am
├── missing
├── NEWS
├── proj1
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
├── proj2
│   ├── Makefile.am
│   ├── module1
│   │   └── Makfile.am
│   └── module2
│       └── Makfile.am
└── README

以下を除いて、ここにあるほとんどのファイルは空です。

------configure.ac---------

AC_INIT([TEST], [1.0])
found_makefile_am=`find . -name 'Makefile.am' | sed -e 's/\.am$//g' -e 's/^\.\///g' | sed ':a;N;$!ba;s/\n/ /g'`
found_mk=`find . -name '*.mk.in' | sed -e 's/\.am$//g' -e 's/^\.\///g' | sed ':a;N;$!ba;s/\n/ /g'`
AM_INIT_AUTOMAKE
#AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])
AC_CONFIG_FILES([${found_makefile_am}])
AC_CONFIG_FILES([${found_mk}])
AC_OUTPUT

------proj*/Makefile.am---------

SUBDIRS = module1 module2

次の行に注意してください。

AC_CONFIG_FILES([${found_mk}])

完全に機能しますが、これは次のとおりです。

AC_CONFIG_FILES([${found_makefile_am}])

失敗:

$autoreconf -i
automake-1.12: error: no 'Makefile.am' found for any configure output
automake-1.12: Did you forget AC_CONFIG_FILES([Makefile]) in configure.ac?
autoreconf-2.69: automake failed with exit status: 1

そして、私はそれを次のものに置き換える必要がありました:

AC_CONFIG_FILES([proj2/Makefile proj1/Makefile Makefile])

autoconfigがautomakeを呼び出す直前に、シェル変数が適切に展開されていないように思えます。この問題の解決策はありますか?

4

2 に答える 2

2

autoconfconfigure.acを実行する前に設定を行う必要があるため、すべてのシェル コマンドはm4_esyscmd. ハンマーで親指を叩く最良の方法についてアドバイスを提供していることに注意してください。つまり、これを行うべきではありませんが、AC_CONFIG_FILES の内容を自動的に入力したい場合は、次のようにすることができます。

AC_CONFIG_FILES(m4_esyscmd([find ...]))

コマンド...の残りの部分はどこですか。findこれにより、configure スクリプトがユーザーによって実行されるまで待機するのではなく、autoconf 中に m4 が実行されているときに find コマンドが呼び出されます。Makefile.amを実行する前にファイルを見つける必要がありautomake、configure スクリプトのかなり前に automake が呼び出されるため、これが必要です。

于 2013-08-19T21:26:56.373 に答える