CMake 4 に上げたら Compatibility with CMake < 3.5 has been removed from CMake. で configure が止まった人向けです。原因は cmake_minimum_required の VERSION が古いことで、3.31.6 と 4.4.3 の9ケースを実機検証して直し方を5つ確かめました。
この記事が解決する悩み
- CMake 4 に上げたら configure が Compatibility with CMake < 3.5 のエラーで止まった
- エラーが指す行を見ても、どこをどう直せばいいのか分からない
- 依存ライブラリ側の CMakeLists.txt が古くて、自分のファイルを直しても消えない
対象読者は C++ のビルド環境を自分で触っているエンジニアです。cmake_minimum_required と CMake のバージョン対応は知っている前提で書きます。
結論
最短の直し方は cmake_minimum_required の VERSION を 3.10 以上に上げることです。
# 1. 自分のプロジェクトを直す(推奨)
cmake_minimum_required(VERSION 3.10...4.4)
# 2. 依存先が直せないときは、親から下限を伝える
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
# 3. とりあえず configure を通したいだけならコマンドラインから
# cmake -S . -B build -DCMAKE_POLICY_VERSION_MINIMUM=3.5
この3行の使い分けは、原因が自分のファイルにあるか依存先にあるかで変わります。
ケース1: cmake_minimum_required の VERSION が 3.0 のまま
一番多いパターンです。VERSION 3.0 のプロジェクトを CMake 4.4.3 で configure すると、こうなります。
$ cmake -S legacy -B b_legacy_443 -G "NMake Makefiles"
# 実行結果(legacy/CMakeLists.txt は cmake_minimum_required(VERSION 3.0))
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
(中略: VERSION 引数の書き換えを促す案内)
Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.
EXIT=1
CMake 3.31.6 なら同じファイルでも通ります。
$ cmake -S legacy -B b_legacy_331 -G "NMake Makefiles"
# 実行結果(同じ CMakeLists.txt を CMake 3.31.6 で configure)
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of CMake.
-- Configuring done (0.6s)
-- Generating done (0.0s)
EXIT=0
> b_legacy_331\demo.exe
# 実行結果
demo ok
同じ CMakeLists.txt で結果が変わるのは、CMake 4.0 で 3.5 未満の互換コードが削除されたからです。
直し方は1行目の VERSION を 3.10 以上にすることです。ここを書き換えるしかありません。
ケース2: 依存先の CMakeLists.txt に VERSION 2.8 が残っている
自分のプロジェクトを直したのにエラーが消えないなら、add_subdirectory で取り込んでいる依存先が古いままです。
$ cmake -S dep_case -B b_dep_443 -G "NMake Makefiles"
# 実行結果(dep_case/vendor/CMakeLists.txt は cmake_minimum_required(VERSION 2.8))
CMake Error at vendor/CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
(中略: VERSION 引数の書き換えを促す案内)
Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.
EXIT=1
エラーのパスが vendor/CMakeLists.txt を指していたら、親ではなくその1行目を直します。
ベンダーから配布されたファイルで触れない場合は、ケース5の回避策を使ってください。
ケース3: cmake_policy(VERSION …) が原因の場合
1行目が 3.10 なのに落ちることがあります。cmake_policy も同じルールで判定されるからです。
$ cmake -S policy_call -B b_policy_443 -G "NMake Makefiles"
# 実行結果(policy_call/CMakeLists.txt の3行目が cmake_policy(VERSION 3.0))
CMake Error at CMakeLists.txt:3 (cmake_policy):
Compatibility with CMake < 3.5 has been removed from CMake.
(中略: VERSION 引数の書き換えを促す案内)
Or, add -DCMAKE_POLICY_VERSION_MINIMUM=3.5 to try configuring anyway.
EXIT=1
直し方は cmake_policy(VERSION 3.10) に上げるか、その行を消すことです。cmake_minimum_required がポリシー設定を兼ねているので、重複していれば削れます。
ケース4: VERSION を 3.10…4.4 に書き換える(恒久対応)
警告まで消したいなら範囲指定を使います。下限と上限を書くと、その範囲のポリシーが適用されます。
cmake_minimum_required(VERSION 3.10...4.4)
project(ModernDemo C)
add_executable(demo main.c)
$ cmake -S modern -B b_modern_443 -G "NMake Makefiles"
# 実行結果(警告は1行も出ない)
-- Configuring done (0.6s)
-- Generating done (0.0s)
EXIT=0
[100%] Built target demo
EXIT(build)=0
> b_modern_443\demo.exe
# 実行結果
demo ok
警告が1行も出なくなったので、新しい CMake でも古い CMake でも同じ挙動になります。
ケース5: 今すぐ通したいときの CMAKE_POLICY_VERSION_MINIMUM
依存先が手元にない、今日中にビルドを通したい。そんなときの逃げ道が CMAKE_POLICY_VERSION_MINIMUM です。
$ cmake -S legacy -B b_legacy_443_min -G "NMake Makefiles" -DCMAKE_POLICY_VERSION_MINIMUM=3.5
# 実行結果(エラーが警告に変わり、configure が通る)
CMake Warning (deprecated) at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of CMake.
This warning is for project developers. Use -Wno-author or -Wno-deprecated
to suppress it.
EXIT=0
> b_legacy_443_min\demo.exe
# 実行結果
demo ok
$ cmake -S legacy -B b_legacy_443_min34 -G "NMake Makefiles" -DCMAKE_POLICY_VERSION_MINIMUM=3.4
# 実行結果(3.4 ではエラーのまま)
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
EXIT=1
コマンドラインではなく親の CMakeLists.txt で指定する
毎回のコマンドに -D を足すのが面倒なら、親の CMakeLists.txt に set() で書きます。これは add_subdirectory 配下にも効きます。
cmake_minimum_required(VERSION 3.10...4.4)
project(DepCase2 C)
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
add_subdirectory(vendor)
add_executable(demo main.c)
target_link_libraries(demo PRIVATE vendor)
$ cmake -S dep_case2 -B b_dep_443_set -G "NMake Makefiles"
# 実行結果(vendor の 2.8 は警告止まりで、ビルドまで通る)
CMake Warning (deprecated) at vendor/CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 3.10 will be removed from a future version of CMake.
This warning is for project developers. Use -Wno-author or -Wno-deprecated
to suppress it.
EXIT=0
[50%] Built target vendor
[100%] Built target demo
EXIT(build)=0
> b_dep_443_set\demo.exe
# 実行結果
vendor ok
つまずきポイント
- CMake 3.31.6 では Deprecation Warning、4.4.3 では Error です。CI と手元でバージョンが違うと、片方でしか再現しません。
- -DCMAKE_POLICY_VERSION_MINIMUM=3.4 では回避できません。CMake 4.x が受け付ける下限は 3.5 です。
- CMAKE_POLICY_VERSION_MINIMUM を指定しても警告は消えません。エラーが CMake Warning (deprecated) に変わるだけです。
- その警告は実際の出力に Use -Wno-author or -Wno-deprecated to suppress it. と出るので、-Wno-deprecated で抑制できます。
- エラーのパスが vendor/CMakeLists.txt のようにサブディレクトリを指すなら、自分のファイルをいくら直しても消えません。
【広告】【Value AI Writer byGMO】高品質なSEO記事をAIで自動生成。![]()
検証環境
Windows 11(build 10.0.26200)上で、公式のポータブル zip を展開した CMake 3.31.6 と CMake 4.4.3 を使いました。
ジェネレータは NMake Makefiles、コンパイラは MSVC 19.50.35728.0(Visual Studio 18 Community、MSVC v145 ツールセット)です。
全ケースで configure、ビルド、生成した demo.exe の実行まで確認しています。各セクションのコードと結果は、その実行ログからの抜粋です。

参考
- CMake 4.0 Release Notes 3.5 未満の互換性が削除された告知
- CMAKE_POLICY_VERSION_MINIMUM 回避用の変数の仕様
- cmake_minimum_required 1行目の書き方と VERSION 範囲構文
- CMP0000 ポリシーの既定値を決めるルール
- CMake 4.1 Release Notes 4系で追加されたポリシー
あわせて読みたい
- 【C++】Visual Studio 2026 のC++新機能 — Segment Heap と C++23/26
- 【C++】C++26 Static Reflection 完全ガイド — コード自動生成
- 【OSS】OpenCode 入門ガイド — OSS AIコーディングエージェントの使い方
- 【Git】Git 3.0 完全ガイド2026 — SHA-256 デフォルト化と Reftable
【広告】このサイトはConoHa WINGで運営しています。安定した高速サーバーで快適にブログを書けています。いつもありがとう!!![]()

コメント