Oracle ACE

MySQL

MySQL Server 8.4.6 支持 CMake 4

从 MySQL 8.4.6 和 9.4.0 开始,MySQL Server 已支持 CMake 4,预计未来版本将不再支持 3.10 之前的版本。旧版本 MySQL(如 5.7、8.0 早期版本)的源码并未针对 CMake 4 进行适配,直接编译会因版本兼容性问题失败。

CMake 4 与 CMake 3 的主要区别

CMake 4 是一次破坏性更新(Breaking Change),与 3.x 系列的核心差异如下:

1. 版本兼容性硬切断(最重大变更)

CMake 4 首次硬性移除了对 CMake < 3.5 的兼容性支持 :

  • CMake 3.x:cmake_minimum_required(VERSION 2.8) 只会产生弃用警告,仍可继续配置
  • CMake 4.0+:如果 cmake_minimum_required()cmake_policy() 设置的版本低于 3.5,直接报错退出

错误示例:

1
cmake_minimum_required(VERSION 3.0)  # CMake 4 会报错

错误信息:

1
2
3
CMake Error at CMakeLists.txt:2 (cmake_minimum_required):
Compatibility with CMake < 3.5 has been removed from CMake.
Update the VERSION argument <min> value. Or, use the <min>...<max> syntax...

2. 新增 CMAKE_POLICY_VERSION_MINIMUM 机制

为帮助用户过渡,CMake 4 引入了全局覆盖变量 :

  • 环境变量:CMAKE_POLICY_VERSION_MINIMUM=3.5
  • 命令行参数:-DCMAKE_POLICY_VERSION_MINIMUM=3.5

该变量可强制提升所有 cmake_minimum_required() 声明的最低版本至 3.5,作为临时兼容方案。

使用 CMake 4 编译 MySQL 服务器

MySQL 8.4.6+ 或 9.4.0+ 这些版本已官方适配 CMake 4,可直接编译:

1
2
cmake .. -DCMAKE_BUILD_TYPE=Release
make

下面是具体步骤演示。

1. 安装 Cmake 4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 假设安装包在当前目录,将其解压到 /usr/local/
[root@rl9 shawnyan]# tar zxf cmake-4.3.2-linux-x86_64.tar.gz -C /usr/local/

# 查找解压后的真实目录名
[root@rl9 shawnyan]# cd /usr/local/
[root@rl9 local]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 3 2024 bin
drwxr-xr-x 6 root root 52 May 11 15:46 cmake-4.3.2-linux-x86_64
drwxr-xr-x. 2 root root 6 Nov 3 2024 etc
drwxr-xr-x. 2 root root 6 Nov 3 2024 games
drwxr-xr-x. 2 root root 6 Nov 3 2024 include
drwxr-xr-x. 2 root root 6 Nov 3 2024 lib
drwxr-xr-x. 3 root root 17 Jan 15 2025 lib64
drwxr-xr-x. 2 root root 6 Nov 3 2024 libexec
drwxr-xr-x. 2 root root 6 Nov 3 2024 sbin
drwxr-xr-x. 5 root root 49 Jan 15 2025 share
drwxr-xr-x. 2 root root 6 Nov 3 2024 src

# 查找解压后的真实目录名
[root@rl9 local]# mv cmake-4.3.2-linux-x86_64/ cmake

# 更新环境变量,在文件最后添加
vi ~/.bashrc
export PATH=/usr/local/cmake/bin:$PATH

# 保存退出后,刷新配置文件
source ~/.bashrc

# 确认 cmake 版本
[root@rl9 ~]# cmake --version
cmake version 4.3.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).
[root@rl9 ~]#

2. 编译 MySQL 8.4.6

克隆 MySQL 源码。

1
2
3
4
5
6
7
8
9
[root@rl9 data]# git clone https://github.com/mysql/mysql-server.git --depth=1 -b mysql-8.4.6
Cloning into 'mysql-server'...
remote: Enumerating objects: 48041, done.
remote: Counting objects: 100% (48041/48041), done.
remote: Compressing objects: 100% (33427/33427), done.
remote: Total 48041 (delta 13921), reused 42830 (delta 13597), pack-reused 0 (from 0)
Receiving objects: 100% (48041/48041), 455.74 MiB | 9.83 MiB/s, done.
Resolving deltas: 100% (13921/13921), done.
Note: switching to '3f821bcb4ee93cd90c0ffa0f8e17bb9677502acf'.

开始编译。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@rl9 mysql-server]# mkdir build
[root@rl9 mysql-server]# cd build/
[root@rl9 build]# cmake .. -DCMAKE_BUILD_TYPE=Release
-- Running cmake version 4.3.2
-- This is .el9. as found from 'rpm -qf /'
-- Looking for a devtoolset compiler
-- Using /opt/rh/gcc-toolset-12/root/usr/bin/gcc
-- Using /opt/rh/gcc-toolset-12/root/usr/bin/g++
-- CMAKE_MODULE_PATH is /data/mysql-server/cmake
-- MySQL 8.4.6
...
-- Generating done (3.9s)
-- Build files have been written to: /data/mysql-server/build
[root@rl9 build]# make -j4
[ 0%] Building CXX object CMakeFiles/gmock.dir/extra/googletest/googletest-1.14.0/googlemock/src/gmock-all.cc.o
[ 0%] Building CXX object CMakeFiles/gtest_main.dir/extra/googletest/googletest-1.14.0/googletest/src/gtest_main.cc.o
...
喝杯咖啡等一会,看看最近谁来 少安事务所 评论了。
...
[100%] Linking CXX executable ../../runtime_output_directory/merge_large_tests-t
[100%] Built target merge_large_tests-t
[root@rl9 build]# make -j4 install
[ 0%] Built target gmock_main
...
-- Up-to-date: /usr/local/mysql/.
-- Installing: /usr/local/mysql/docs/INFO_BIN
[root@rl9 build]#

确认编译信息。

1
2
3
4
5
[root@rl9 build]# cat /usr/local/mysql/docs/INFO_BIN
===== Information about the build process: =====
Build was run at 2026-05-11 09:07:07Z
Build was done on Linux-5.14.0-611.47.1.el9_7.x86_64 processor x86_64
Build was done using cmake 4.3.2

到此,安装完成。

总结

MySQL 8.4.6 和 9.4.0 及以上版本已原生支持 CMake 4,目前主流操作系统仍默认使用 CMake 3。

1
2
3
4
[shawnyan@rl9 ~]$ cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)
[shawnyan@rl9 ~]$ cmake --version
cmake version 3.26.5

如果你计划使用更多 CMake 4 的特性,可以在编译源码的服务器上升级 CMake。


Have a nice day ~ ☕

🌻 近期内容 ▼

👉 这里有得聊

如果对国产基础软件(操作系统、数据库、中间件)、AI、Vibe Coding、OpenClaw 、Hermes Agent 等感兴趣,可以加群一起聊聊。关注微信公众号:(少安事务所),后台回复[群],即可看到入口。如果这篇文章为你带来了灵感或启发,请帮忙『点赞、推荐、转发』吧,感谢!ღ( ´・ᴗ・` )~