タイトル: ./configure
SEOタイトル: Linux ./configure 完全ガイド - GNU Autotools / --prefix / --enable / --with
| この記事の要点 |
|
./configure とは
./configure は GNU Autotools(autoconf / automake)が生成する設定スクリプトです。ソースコードから OSS をビルドする際、お使いの環境(OS、コンパイラ、ライブラリの有無)を調査して、適切な Makefile を生成します。
# 典型的なビルド3手順
tar xzf nginx-1.27.0.tar.gz
cd nginx-1.27.0
./configure --prefix=/usr/local/nginx # 1. Makefile 生成
make # 2. コンパイル
sudo make install # 3. インストール
主要オプション
| オプション | 役割 | デフォルト |
|---|---|---|
--prefix=DIR | インストール先ベースディレクトリ | /usr/local |
--bindir=DIR | 実行ファイル配置先 | $prefix/bin |
--libdir=DIR | ライブラリ配置先 | $prefix/lib |
--sysconfdir=DIR | 設定ファイル配置先 | $prefix/etc |
--enable-FEATURE | 機能を有効化 | 製品依存 |
--disable-FEATURE | 機能を無効化 | 製品依存 |
--with-PACKAGE | 依存ライブラリのパス指定 | 自動検出 |
--without-PACKAGE | 依存ライブラリを使わない | 自動検出 |
--host=TYPE | クロスコンパイル先 | 自分の OS |
CC=gcc CFLAGS=-O2 | 環境変数で渡す | 環境変数 |
典型的な使用例
nginx をビルド
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--pid-path=/var/run/nginx.pid \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-pcre \
--with-openssl=/usr/local/openssl-3.0
Python をビルド(pip TLS エラー対策)
./configure \
--prefix=/usr/local \
--enable-optimizations \
--enable-shared \
--with-openssl=/usr/local/openssl \
LDFLAGS="-Wl,-rpath,/usr/local/openssl/lib"
make -j$(nproc)
sudo make altinstall # python3.11 として共存インストール
PHP をビルド
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/etc/php \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib \
--with-curl \
--with-openssl \
--enable-mbstring \
--enable-intl
./configure が裏で行うこと
./configure はテストコードを書いてコンパイルしては結果を見るを繰り返し、環境を調査します。生成物:
| ファイル | 役割 |
|---|---|
Makefile | ビルドルール |
config.h | 機能フラグマクロ定義(HAVE_OPENSSL 等) |
config.status | 再生成スクリプト |
config.log | ★ 検査の全ログ。エラー調査の必読 |
configure エラーの典型
依存ライブラリ不足
configure: error: zlib library not found.
You can disable zlib support by adding --without-zlib.
configure: error: OpenSSL >= 1.1.1 not found.
checking for libxml-2.0 >= 2.7.6... configure: error: Package requirements
(libxml-2.0 >= 2.7.6) were not met:
No package 'libxml-2.0' found
対処: 開発ヘッダ付きパッケージ(-dev / -devel)を追加:
# Debian / Ubuntu
sudo apt install zlib1g-dev libssl-dev libxml2-dev pkg-config
# RHEL / CentOS / Rocky
sudo dnf install zlib-devel openssl-devel libxml2-devel pkgconfig
# Alpine
sudo apk add zlib-dev openssl-dev libxml2-dev pkgconfig
# 一括で代表的な build essentials
# Debian
sudo apt install build-essential
# RHEL
sudo dnf groupinstall "Development Tools"
config.log でエラー深掘り
# エラー直近を表示
tail -100 config.log
# どのテストで失敗したか
grep -B 5 -A 5 "error" config.log | less
# 「configure: error: …」の前後を見る
grep -B 20 "configure: error" config.log
並列ビルドと再ビルド
# 並列ビルド(CPU コア数を活用)
make -j$(nproc) # Linux
make -j$(sysctl -n hw.ncpu) # macOS
# クリーン
make clean # オブジェクトファイル削除
make distclean # configure の生成物も削除
# configure をやり直し
./configure --prefix=/usr/local --enable-debug
make
# config.status で同じ条件で再 configure
./config.status --recheck
configure がない場合
git clone した直後のリポジトリには configure が無く、configure.ac や Makefile.am しか無いことがあります。autoreconf で生成:
# Autotools 必要
sudo apt install autoconf automake libtool
# configure を生成
autoreconf -i
# または autogen.sh があれば
./autogen.sh
# 以降は通常通り
./configure --prefix=/usr/local
make
sudo make install
configure vs CMake / Meson
| ビルドシステム | configure コマンド | 特徴 |
|---|---|---|
| GNU Autotools | ./configure | 古典的、UNIX 系で汎用 |
| CMake | cmake -B build -DCMAKE_INSTALL_PREFIX=/opt | 多プラットフォーム対応、IDE 連携 |
| Meson | meson setup build --prefix=/usr/local | Python 製、高速 |
| Cargo (Rust) | cargo build --release | configure 不要 |
| Go | go build | configure 不要 |
FAQ
Q: --prefix を後から変えたい
A: make distclean → 再度 ./configure --prefix=新パス → make → make install。makefile を直接編集してはいけません。
Q: sudo make install で何がどこに入ったか
A: install ターゲットを見ると分かります。または checkinstall ツールで deb / rpm パッケージ化してインストールすると、後でアンインストール可能。
Q: 同じ製品の異なるバージョンを共存させたい
A: --prefix=/opt/myapp-1.5 等で各バージョン別ディレクトリにし、/etc/alternatives や シンボリックリンク /usr/local/bin/myapp で切り替え。Python は make altinstall も活用。