Tarball 指原始碼經 tar 打包並壓縮 (.tar.gz, .tar.bz2, .tar.xz) 的發佈格式,通常包含:
.c, .cpp, .h...)configure, CMakeLists.txt, meson.build)README, INSTALL, CHANGELOG, COPYING)# .tar.gz (gzip)
tar -xzf package.tar.gz
# .tar.bz2 (bzip2)
tar -xjf package.tar.bz2
# .tar.xz (xz, 壓縮率最高)
tar -xJf package.tar.xz
# 通用 (自動偵測壓縮格式,tar 1.15+)
tar -xf package.tar.*
./configure)cd package-version
# 查看可用選項
./configure --help
# 常用選項
./configure --prefix=/usr/local/package-name # 安裝路徑 (預設 /usr/local)
./configure --enable-shared --disable-static # 動態庫/靜態庫
./configure --with-ssl=/usr/local/openssl # 指定依賴路徑
./configure CC=gcc CFLAGS="-O2 -pipe" # 指定編譯器/優化參數
# 執行配置 (生成 Makefile)
./configure --prefix=/usr/local/myapp
關鍵產出:Makefile (編譯規則)、config.h (編譯時宏定義)、config.status (重新配置腳本)。
make)# 預設讀取當前目錄 Makefile
make
# 多核心並行編譯 (N = CPU 核心數 + 1)
make -j$(nproc)
# 僅編譯特定目標
make all
make lib
make bin/myapp
make install)# 預設需 root 權限寫入 /usr/local
sudo make install
# 或指定 DESTDIR 打包/測試 (不污染系統)
make install DESTDIR=/tmp/staging
# 卸裝 (需原始碼目錄保留)
sudo make uninstall
# 若無 uninstall 目標,手動刪除或用 checkinstall 建立套件
make clean # 刪除 .o 檔、執行檔
make distclean # 連同 Makefile、config.h 刪除 (回到解包初始狀態)
./configure --host=arm-linux-gnueabihf \
--prefix=/opt/arm/myapp \
CC=arm-linux-gnueabihf-gcc \
CFLAGS="-O2 -march=armv7-a"
sudo apt install checkinstall # Debian/Ubuntu
sudo make install
# 替換為
sudo checkinstall -D --install=yes --fstrans=yes --pkgname=myapp --pkgversion=1.0
# 產生 .deb/.rpm 可用 dpkg/rpm 管理
mkdir build && cd build
../configure --prefix=/usr/local/myapp
make -j$(nproc)
sudo make install
| 錯誤 | 原因 | 解決 |
|---|---|---|
configure: error: C compiler cannot create executables | 缺編譯器/庫 | apt install build-essential / yum groupinstall "Development Tools" |
checking for libxxx... not found | 缺開發套件 | apt install libxxx-dev (開發頭檔/靜態庫) |
Makefile:xxx: recipe for target 'xxx' failed | 原始碼錯誤/相容性 | 查看完整錯誤、檢查 GCC 版本、嘗試 CFLAGS="-U_FORTIFY_SOURCE" |
/usr/bin/ld: cannot find -lxxx | 連結器找不到庫 | ldconfig、檢查 LD_LIBRARY_PATH、安裝對應 -dev 包 |
| 權限被拒絕 | 安裝目錄需 root | sudo make install 或 --prefix=$HOME/.local |
| 系統 | 配置檔 | 特點 | 常見專案 |
|---|---|---|---|
| Autotools | configure.ac / Makefile.am | 成熟、跨平台、標準 | GCC, Coreutils, GLib, 多數 GNU 專案 |
| CMake | CMakeLists.txt | IDE 整合好、Windows 支援佳 | LLVM, Qt, KDE, OpenCV, ROS |
| Meson | meson.build | 速度快、語法簡潔、預設安全 | GNOME, systemd, Wayland, 新專案趨勢 |
| Bazel | BUILD.bazel | 巨型倉庫、遠端快取、強一致性 | Google 內部、TensorFlow, Abseil |
遇到 CMakeLists.txt → cmake -B build -DCMAKE_INSTALL_PREFIX=... → cmake --build build --target install