make
およびmake install
メソッドを使用してプログラムをインストールする場合、新しいプログラムのインストールを開始する前に、(非常に多くの場合)インストールする必要のある依存関係が多数あります。そのため、現在、依存関係が欠落しているというエラーメッセージが表示されるたびに、各依存関係を手動でインストールします。
make
のmanページには、先に進み、依存関係を自動的にインストールする単純なオプションがリストされていないことがわかります。
それはmakefileの目的ではありません。 Makefileは、ソフトウェアのビルドとシステムへのインストールを一般的な方法(パッケージマネージャーなし)でのみ処理します。実際にアプリケーションを実行するための要件があるかどうかは気にしません(気にしないでください)。これは仕様によるものです。いくつかの点を考慮してください:
1)ディストリビューションがパッケージマネージャーを使用している場合(ほとんどすべてが何らかの方法で使用しています)、とにかくmake install
を直接呼び出さないでください。パッケージマネージャーをバイパスしてシステムを汚染します。その場合、パッケージをビルドするときにmake install
が「サンドボックス」環境で呼び出され、インストールがパッケージ化され、選択したパッケージマネージャーによってパッケージがインストールおよび処理されます。
2)すべてを「正しい」順序でインストールする必要はありません。実際、これは間違いなく循環依存につながり、インストールすることは不可能になります。パッケージマネージャーでさえ、通常これについて厳しすぎるため、問題が発生します。また、パッケージをビルドしているとき(buildscriptはmake install
を呼び出します)、実際にはプログラムを実行するつもりはなく、おそらく要件がインストールされていません。結局のところ、他のコンピューターにインストールされるパッケージを作成しているだけです。
3)これを行うポータブルな方法はありません。定義上プラットフォームに依存しないmake install
は、要件を探す場所をどのように知るのでしょうか(ハードワイヤードURLか何か?それはすぐに壊れます!)。予期していなかった将来のものも含め、すべての可能性で実行する必要があるため、パッケージマネージャーを通過することはできません。バージョンも変更されます。
4)何をインストールするかを決めるのは1つだけではありません。共有ライブラリは、さまざまなパッケージで提供できます。 libc
は複数あります。そして、OpenGL機能を提供する複数のパッケージ(異なるグラフィックスカード)、行列代数用の異なるパッケージ、メディア再生用の異なるライブラリ(vlcとgstreamer)、そして私は長い間続けることができました。システムの設計方法と使用するコンポーネントはあなたの選択です。このモジュラー設計の美しさです(すべてを1枚のCD/DVDに入れるという古いウィンドウの代わりに、すべてのライブラリを異なるパッケージで1000回インストールします。正味の設計で10MBを超えてはならないすべてのアプリケーションのギガバイトインストール).
5)それはmake install
の仕事ではなく、異なるレベルのメンテナンスです。 configure && make && make install
は、インストールしたもののチェック(ビルド時の依存関係)、コードのコンパイル、ファイルの配置場所の表示を処理します。必要な他のソフトウェアのバージョンに関する要件は、パッケージングと配布のドメインに分類されます。これは、パッケージマネージャー、または従来の方法でインストールする場合はシステム管理者という別のプロセスです。これらの2つの概念を決して混ぜてはいけません-それは混乱につながるでしょう。物事が明確に定義されたレイヤーに分離されている場合、開発者はパッケージャーやディストリビューションのメンテナーから独立して物事を変更できます。ディストリビューションが物事を別の名前で再パッケージして別の代替物を使用する場合、物事を別のディレクトリに置くと、アプリケーションを期待できませんmakefileを管理する開発者は、これを知っているか、気にかけます。
つまり、依存関係がビルド時の依存関係(make
を実行できない場合-通常はconfigure
スクリプトによって検出されます)であるか、実行時の依存関係であるかに関係なく、 makefileレベルで実行されます。物事を間違った方法で行わないでください、そして標準を考慮してください。まだパッケージがないものを扱っている場合(ユーザー提供のパッケージを確認してください、すでにそこにある可能性があります)、何が必要かを調査し、実際にパッケージをビルドする必要があります。他の人にも適しています。あなたが作ったパッケージ。