0

パッケージ用に独自の「構成」スクリプトを作成しています。Makefileは、特定のバージョンでGNU makeに追加されたいくつかの機能(例:「呼び出し」関数)を使用します。インストールされている「make」ユーティリティがGNUのものであるかどうか、そしてそれがその機能をサポートしているかどうかを確認したいのですが、その方法がわかりません。

「configure」スクリプトは移植可能であると想定されているため(Autoconf、SCons ...などは避けたいのですが、それは問題ではありません)、移植可能なソリューションが必要です。GNU makeのドキュメントを調べましたが、有用なものは見つかりませんでした。

よろしくお願いします(もちろん、この質問が無関係である場合、または「make」ツールの存在と使いやすさをチェックすることがconfigureの仕事の一部ではないと思われる場合は申し訳ありません)。

PS: `make -p´オプションを見つけました。その最初の行は#GNU Make 3.81を出力しますが、それが別のGNU拡張機能なのか、それとも「標準」なのかわかりません。

4

2 に答える 2

1

私は実行しmake --versionます。

GNU makeの場合、次のようになります。

GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

したがって、最初の行にはバージョンバージョンが含まれており、GNUmakeであることを示しています。最初の行に、バージョンオプションがサポートされていないというエラーメッセージなど、他の何かが含まれている場合は、サポートされていません。

また、configureスクリプトから、必要なコマンドを含む一時的なMakefileを発行することもできます。あなたが見つけたmakeがエラーなしでそれを実行できる場合、つまり終了コード0で、あなたは問題ありません。正確なバージョンを判別する必要はありません。機能のチェックは「実際の」autoconfの精神に基づいており、バージョン番号をチェックして、サポートされているものとサポートされていないものに関する暗黙知を使用するよりも、おそらく信頼性が高くなります。

最後に、「実際の」configure / autoconfツールを調べて、それらがどのように機能するかを確認することを検討してください。または、独自のツールの代わりに使用することもできます。

于 2013-01-13T17:17:30.903 に答える
1

make --versionGNUツールの「ローカル標準」です。他のをサポートする予定がない場合は、次makeのことを前提として、目的を達成するのに十分です。

  1. 使用する機能が追加されたGNUmakeのバージョン番号を知っていること。
  2. 他のいくつかの実装は有害な方法でmake解釈されず、それ自体をとして記述しません。--versionGNU Make 9.99
于 2013-01-13T17:13:04.477 に答える