10.

Linux の make install 完全ガイド(configure / make / 並列ビルド / アンインストール)

編集
この記事の要点
  • Linux の定石: ./configure && make && sudo make install でソースから OSS をビルドして導入
  • configure: 依存ライブラリ検出と Makefile 生成。--prefix=/usr/local でインストール先指定
  • make -j$(nproc) で CPU コア数分の並列ビルド → 数倍速い
  • make install/usr/local/bin 等にコピーするだけ。パッケージ管理外になるため checkinstall で deb/rpm 化推奨
  • アンインストール: make uninstall(提供されていれば) / ビルドディレクトリを保管必須

make install とは

Linux で OSS のソースコードからソフトウェアを自前でビルドしてインストールする伝統的な手順です。配布元から tarball を入手し、3 段階で完了します:

# 典型的な流れ
wget https://example.org/foo-1.2.3.tar.gz
tar xzf foo-1.2.3.tar.gz
cd foo-1.2.3
./configure
make
sudo make install

各ステップの役割

コマンド役割失敗パターン
./configure依存検出、Makefile 生成「configure: error: foo not found」→ devel パッケージ不足
makeソースコンパイル「fatal error: foo.h: No such file」→ ヘッダ不足
make installビルド成果物を /usr/local/ 等へコピー「Permission denied」→ sudo 必要

事前準備: ビルドツール一式

# Ubuntu / Debian
sudo apt update
sudo apt install -y build-essential autoconf automake libtool \
                    pkg-config m4 git curl

# RHEL / CentOS / AlmaLinux / Rocky
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y autoconf automake libtool pkgconfig

# 個別の依存(例: SSL 系)
sudo apt install -y libssl-dev libcurl4-openssl-dev zlib1g-dev

configure の主要オプション

# インストール先を変更
./configure --prefix=/opt/foo

# 機能 ON / OFF
./configure --enable-shared --disable-static

# 依存ライブラリの場所を指定
./configure --with-openssl=/usr/local/openssl

# 何が指定可能か一覧表示
./configure --help | less

# 設定結果のサマリ確認
./configure --prefix=/usr/local 2>&1 | tee configure.log
オプション意味デフォルト
--prefix=DIRインストール先/usr/local
--bindir=DIR実行ファイル$prefix/bin
--libdir=DIR共有ライブラリ$prefix/lib
--sysconfdir=DIR設定ファイル$prefix/etc
--enable-FEATURE機能の有効化パッケージによる
--with-PACKAGE依存パッケージ場所指定自動検出

make の並列ビルド

シングルスレッドで make すると遅いので、CPU コア数 + 1 程度の並列度を指定します:

# 自動でコア数取得
make -j$(nproc)

# 明示的に 8 並列
make -j8

# ビルド時間を計測
time make -j$(nproc)

# エラーで止まらず可能な限り続行
make -k -j$(nproc)

# ビルド成果物だけクリーン
make clean
make distclean   # configure 結果まで含めてクリーン

make install のインストール先

デフォルトでは次の場所に配置されます:

種類パス
実行ファイル/usr/local/bin/
ライブラリ/usr/local/lib/
ヘッダファイル/usr/local/include/
マニュアル/usr/local/share/man/
設定ファイル/usr/local/etc/

パッケージ管理 (apt / dnf) と競合しないように、ディストリ標準は /usr/、自前ビルドは /usr/local/ または /opt/ が原則です。

共有ライブラリのリンク問題

# 「libfoo.so.1: cannot open shared object file」が出る場合
# /usr/local/lib をリンカに認識させる

# 一時的に
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

# 永続化(/etc/ld.so.conf.d/ に追加)
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/local.conf
sudo ldconfig

# 現在認識されているライブラリ確認
ldconfig -p | grep libfoo

アンインストール

make install で入れたものはパッケージ管理外のため、削除も自前で行います:

# 1. Makefile に uninstall ターゲットがあれば
cd /path/to/source/foo-1.2.3
sudo make uninstall

# 2. なければ install ログから手動削除
# 事前に何がインストールされるか確認しておく
make -n install | grep -E "install|cp" > install_list.txt

# 3. 完全自力削除(推奨されない)
sudo rm /usr/local/bin/foo
sudo rm /usr/local/lib/libfoo.*
sudo rm -r /usr/local/include/foo/

checkinstall でパッケージ化(推奨)

make install の代わりに checkinstall を使うと、deb/rpm パッケージを生成して apt/dnf 管理下に置けます:

sudo apt install -y checkinstall

# make install の代わりに
sudo checkinstall --pkgname=foo --pkgversion=1.2.3 --backup=no -y

# 後で削除はパッケージマネージャで
sudo apt remove foo

よくあるエラーと対処

メッセージ原因対処
./configure: command not foundconfigure スクリプトがないautoreconf -fi で生成 or README 確認
configure: error: C compiler cannot create executablesgcc 未インストールapt install build-essential
error: foo.h: No such fileヘッダ不足該当の -dev / -devel パッケージを入れる
collect2: error: ld returned 1リンカエラー、ライブラリ不足--with-PACKAGE オプション確認
make[1]: *** [install] Error 1権限不足sudo make install

FAQ

Q: make install と apt install どちらが良い?
A: apt / dnf にあるならパッケージマネージャ優先。make install は「最新版が必要」「ディストリにない」「独自パッチ適用」のときだけ。

Q: configure に時間がかかりすぎる
A: 依存検出をスキップしたいなら ./configure --disable-dependency-tracking。ccache を入れて 2 回目以降のコンパイルを高速化するのも有効。

Q: ビルドディレクトリは削除して良いか
A: make uninstall が必要な可能性があるため、当面は保管を推奨。アンインストール完了後に削除して構いません。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ls ファイル/ディレクトリ一覧表示
  2. sudo ユーザー指定
  3. cron/crontab ジョブの自動実行と登録方法
  4. wget http通信によるファイルダウンロード
  5. rm ファイル/ディレクトリ削除
  6. pwd カレントディレクトリの表示
  7. cd ディレクトリの移動
  8. ./configure
  9. make
  10. make install
  11. unzip ファイルの解凍
  12. mv ファイル/ディレクトリの移動および名称変更
  13. mkdir ディレクトリの作成
  14. touch 空ファイルの新規作成
  15. vi テキストディタの使用
  16. find ファイル/ディレクトリ検索
  17. grep 文字列の検索
  18. tail ファイルの末尾表示
  19. curl HTTP通信によるリクエスト
  20. nslookup ドメインのIP解決
  21. apt update パッケージリストの情報を更新
  22. apt upgrade パッケージの更新
  23. ln リンク/ショートカットの作成と削除
  24. rsync ファイル/ディレクトリの同期
  25. ssh リモートとの暗号化通信
  26. scp sshを利用したファイルのコピー
  27. unzip zip ファイルを解凍する
  28. cp ファイル/ディレクトリのコピー
  29. diffファイルの差分抽出
  30. fdisk ハードディスクに対する操作
  31. lsblk デバイスをツリー状で表示する
  32. kill プロセスを終了させる
  33. zip ファイルやディレクトリをzip形式に圧縮する
  34. host ドメインからIPアドレスを確認
  35. chmod 権限の変更
  36. ip IPアドレスの確認
  37. chown ファイル/ディレクトリ所有者の変更
  38. chgrp ファイル/ディレクトリのグループ情報の変更
  39. nohupと'&' プログラムのバックグラウンド実行(ssh接続時)
  40. lsof 開いているポート番号の確認
  41. tar ファイルの圧縮と解凍
  42. file ファイルの種類を表示
  43. cat ファイルの中身を表示
  44. head ファイルの先頭部分を表示
  45. wc 行数/単語数/文字数を確認
  46. shutdown システムのシャットダウンと再起動
  47. ps プロセスの確認
  48. which コマンドの絶対パスを調べる
  49. yum RedHat系ディストリビューションの管理
  50. mount ファイルシステムのマウント
  51. 特定フォルダ以下の特定拡張子のファイルを再帰的に削除する方法
  52. 特定のフォルダとそのサブフォルダ内にある特定のファイル名のファイルを再帰的に削除