「make install」は何をしますか?


52

WindowsからLinuxに移行すると、Linuxにソフトウェアをインストールするプロセスを理解できません。Windowsでは、インストールファイルを実行すると、プログラムのインストール先を尋ねられます。ほとんどの場合、プログラムファイルフォルダーのみです。後で、レジストリを編集します。これは、Windowsでのインストールと呼ばれます。Linuxでの「ソフトウェアのインストール」とはどういう意味ですか?

ソースコードをダウンロードして構成し、を使用してバイナリをビルドするとしmakeます。現在、それは単なるバイナリであり、まだ使用可能なプログラムではありません。どのように「インストール」されますか?でmake install?そして、このコマンドは正確に何をしますか?


1
stackoverflow.com/questions/528399/…に対する私の答えmake installは、プログラマーの観点からステップによって行われる通常の種類の事柄の簡単な概要を示しています。
dmckee

回答:


44

Makeは、通常コンパイルに使用される汎用ワークフロープログラムです。しかし、それは何にでも使用できます。

「すべて作成」などの操作を行うと、makeプログラムは「Makefile」という名前の現在のディレクトリにあるファイルから「all」という名前のルールを実行します。このルールは通常、コンパイラを呼び出していくつかのソースコードをバイナリにコンパイルします。

"make install"を実行すると、makeプログラムは前の手順からバイナリを取得し、それらをアクセスできるように適切な場所にコピーします。Windowsとは異なり、インストールにはライブラリと実行可能ファイルをコピーするだけでよく、レジストリの要件はありません。つまり、「make install」はコンパイルされたファイルを適切な場所にコピーするだけです。


4
技術的には、レジストリは必須ではありません。すべてのインストーラーが追加するのは、Linuxのパッケージマネージャーデータベースによく似た、ソフトウェアをアンインストールできるユーザーにとって便利な機能です。
悲しみ

2
@grawity実際、Windowsでは、統合などの多くの理由でレジストリを編集する必要があります。Linuxでは、通常、ソフトウェアを相互に統合するには、インストール後スクリプトなどの方法で、ファイルをコピーするか、構成ファイルに行を追加するだけです。
カミロマーティン

私が命名規則を見つけることができますどのように伝えるために役立つだろう@sharjeel allMakefile私はどこのルール処理を確認できるように、そのセクションのルックスのエンドマーカーが好きで、何をall停止。
プロバックアップ

36

make installMakefile著者が望んでいることは何でもします。通常、この時点では、ビルド中に以前によく知られているように、インストールディレクトリを変更するには遅すぎます。そのため、ヘルプファイルと構成ファイルを正しいパス名で参照できます。

多くのプロジェクトでは、GNU Autotoolsを使用して、ハードウェアとオペレーティングシステムの相違点間の移植性を改善しようとしています。(異なるUnixの亜種は、通常のパスからわずかに外れている関数の宣言にわずかに異なるヘッダーを使用します。ただし、ほとんどのプログラムでは、異なる場所で宣言されたものが必要です。)

プロジェクトがAutotoolsを使用する場合、それをインストールするための通常のマントラは次のとおりです。

./configure
make
make install

./configure通常、コマンドラインのようなオプションを使用することができます--prefix /opt/apacheまたは別のパス名を指定して似たような。/usr/local/一般的なデフォルトですprefix。ローカルに構築されたソフトウェアは1つの場所に住み、配布提供のソフトウェアは「メインディレクトリ」に住むのがはるかに簡単です:/usr/ /bin/など。(パッケージャーは、ファイルに絶対に触れないように非常に注意しています-システム管理者専用であることを知っています。)/usr/local/

とにかく、./configure --prefix /path/to/new/prefix変数を設定しますMakefile設定ファイルを変更し、彼らはファイルの正しい場所を指すように、マニュアルページを修正し、プログラムをコンパイルするときに利用可能であること、などそうはmakeしたい場所をインストールするために特別にソフトウェアを構築し、make installその場所にインストールします。

ほとんどのプログラムは、最終make installステップがなくても実行できます./program_name。多くの場合、プログラムを起動するだけです。これは間違いなくプロジェクトごとのものです- などのようなものpostfixqmail、多くの異なる可動部分で構成されており、それらがすべて一緒に機能していることに依存しています。その他、同様lsまたはsuそれらが中に建設されたディレクトリから罰金を実行する自己完結十分かもしれません(これはしばしば有用ではありません-しかし、時々 。非常に有用な)

ただし、すべてのプロジェクトがAutotoolsを使用しているわけではありません-それらは巨大で複雑で、維持するのが悲惨です。手書きMakefileのsは書くのがはるかに簡単でMakefile、開発者とユーザーの両方にとって、構成変数を使用して単純なものを配布する方がはるかに簡単だと個人的に思います。(ただし、./configure ; make ; make installマントラは機能する場合、ユーザーにとって非常に簡単です。)


19

make installinstallあなたの関数/セクションを実行するよりも何もしませんMakefile


そうですmake clean、基本的にはセクションの下のコードを実行するだけです。
ウルフリックリー

8

Linuxでのソフトウェアのインストールに関して言及する最も重要なことは、ディストリビューションからソフトウェアをインストールする方がはるかに信頼性が高く簡単であることです(これが目的です!)。make install他の方法がない場合にのみ使用してください(代替プログラムも検討してください)。

Windowsユーザーのよくある間違いは、さまざまな場所からプログラムをダウンロードしてインストールしようとすることです。1回のクリックまたはコマンド(パッケージマネージャーで)でインストールできる配布パッケージのチェックアウトを忘れます。

また、Linuxでウイルス感染がない主な理由の1つは、多くのランダムなサイトではなく中央の(信頼できる)場所からソフトウェアをインストールする(またはインストールする必要がある)ことです。

また、Ubuntuなどのディストリビューションには常に古いパッケージが含まれていますが、常に最新のArch Linuxなどのディストリビューションもあります(Debian / Ubuntuなど、Linux向けにリリースされたすべてのプログラムを文字通り提供しているわけではありません)。

パッケージマネージャーを使用すると正確に何が起こるかについては、FHSとディストリビューションの独自のガイドラインに従って、依存関係を確認し、パッケージをダウンロードし、解凍し、すべてのファイルを適切なディレクトリに配置します。パッケージマネージャーのマニュアルページから。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.