このページの目次
Make / CMake / Meson ビルドシステム
カバー: GNU Make (パターンルール) → CMake (ターゲットベース) → Meson (宣言型) → pkg-config → ビルドシステムの選択 対象: C/C++ プロジェクトのビルド
GNU Make
コア構文
# 基本ルール: ターゲット: 前提条件 → レシピ
: : # パターンルール# 変数:
CC := gcc
CFLAGS := -O2 -Wall
LDFLAGS := -lm
# 自動依存関係生成:
:
CMake: ターゲットベース
# CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(myproj C)
add_library(mylib STATIC lib.c lib.h)
target_compile_features(mylib PRIVATE c_std_11)
add_executable(prog main.c)
target_link_libraries(prog PRIVATE mylib)
# 外部依存関係の検索:
find_package(PkgConfig REQUIRED)
pkg_check_modules(ZLIB REQUIRED zlib)
target_link_libraries(prog PRIVATE ${ZLIB_LIBRARIES})
target_include_directories(prog PRIVATE ${ZLIB_INCLUDE_DIRS})
Meson: 宣言型
# meson.build
project('myproj', 'c', version: '1.0')
zlib_dep = dependency('zlib')
mylib = static_library('mylib', 'lib.c', 'lib.h')
executable('prog', 'main.c',
link_with: mylib,
dependencies: zlib_dep,
c_args: ['-O2', '-Wall'])
三者比較
| GNU Make | CMake | Meson | |
|---|---|---|---|
| モデル | 命令型 (どう行うか) | ターゲットベース | 宣言型 (何を求めるか) |
| 依存関係管理 | 手動 | find_package + pkg-config | dependency() 内蔵 |
| コンパイル速度 | ベンチマーク | 遅い (設定フェーズ) | 速い (ninja + キャッシュ) |
| 学習曲線 | 中 | 中高 | 低 |
| IDE 統合 | 弱い | 強い (CLion, VSCode) | 中 |
| Gentoo ebuild | 一般的 | 一般的 | 増加中 |
pkg-config
# インストール済みライブラリの照会:
# .pc ファイルの場所:
# カスタム .pc ファイル:
prefix=/usr/local
参考
- ドキュメント:
info make, cmake.org/documentation, mesonbuild.com - Gentoo:
man 5 ebuild(Make 統合)
キーワード: Make, CMake, Meson, pattern rule, target-based, pkg-config, ninja