5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

makeコマンドでビルド・インストールする

Posted at

プログラムをソースコードから実行可能なバイナリファイルにするには、コンパイル、リンクといった操作を行う必要がある。この一連の作業を「ビルド」という。

Linuxで使われるコマンドラインのビルドツール make は、Makefileという指示ファイルの内容を元に、ビルド、インストール作業を自動化。また、依存関係チェックや、再コンパイルの必要性も自動で判断し実行。

makeコマンドは
・GNUmakefile
・makefile
・Makefile
の順で指示ファイルの検索を行う。慣習として指示ファイル名は「Makefile」が多く用いられる。

●configure スクリプトを提供するソフトウェアでは
・ソースコードの配布物を展開
・configure スクリプトを実行し、環境の確認、Makefileの自動生成
・make コマンドによる、ソフトウェアのビルド
・make install コマンドによる、ソフトウェアのインストール
を実行するだけで、ソースコードからのインストールを完了させることができる。

  1. ./configure
    コンパイルは現在の実行環境を解析し、環境に合わせて実行する為に、configureスクリプトを実行。実行環境に合わせたMakefileを作成。

※カレントディレクトリにconfigureスクリプトが存在する場合は「./configure」、もしくはカレントディレクトリまでの絶対パスを明示的に指定して実行する必要がある。configureスクリプトはパスが通った(環境変数PATHで指定されたディレクトリに存在する)コマンドでは無い為。

  1. make
    makeコマンドで、先に作成したMakefileの記述に従ってソースファイルをコンパイルし、実行ファイルやライブラリを作成。

※一度コンパイルを行った後にソースファイルを変更し、再度コンパイルを行う場合には、makeの前にmake cleanを実行して前回のmake時に作成された一時ファイルを削除する必要がある。

  1. make install
    make installコマンドで、ファイルを適切なディレクトリに配置(インストール)。

※インストール先のディレクトリにアクセス権が無い場合には、make installの前にsuコマンドでrootユーザなどの適切な権限を持つユーザになるか、sudoコマンドを用いてroot権限でmake installを実行。(sudo make install)

別の方法として、./configure実施時に、--prefixを使ってインストール先を実行ユーザーの権限のあるディレクトリに変更して実行することでも対応できる。

▲インストール後にプログラムの起動が失敗する場合、原因として、環境変数LD_LIBRARY_PATHが正しく設定されていない、という可能性がある。
LD_LIBRARY_PATHが正しく設定されていないと、プログラムの実行に必要な共有ライブラリを読み込むことができない。

●install
このターゲットは、実行ファイルや設定ファイル、ライブラリを指定されたディレクトリにコピーし、実行するためのパーミッションの設定などを行う。
この時、install コマンドがよく用いられ、指定されたファイルのコピーと実行するためのパーミッション設定を同時に行ってくれるコマンド。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?