You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake是否支持指定源码外二进制目录?MySQL编译报错求助

MySQL源码编译:解决CMake“请勿在源码目录内构建”错误

问题重现

我在Docker环境下尝试从源码编译MySQL 8.0.15时,遇到了CMake的报错:

CMake Error at CMakeLists.txt:283 (MESSAGE): 请勿在源码目录内构建。强烈建议使用源码外构建:可针对同一源码进行多版本构建,清理时只需删除构建目录(注意'make clean'或'make distclean'无效)。若要强制源码内构建,可添加参数-DFORCE_INSOURCE_BUILD=1。
-- 源码目录:/usr/local/mysql-source
-- 二进制目录:/usr/local/mysql-source
-- 配置未完成,发生错误!详情见"/usr/local/mysql-source/CMakeFiles/CMakeOutput.log"。

我的初始构建命令是在源码目录内执行cmake:

RUN cd /usr/local/mysql-source/ \
&& cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/install \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITHOUT_TOKUDB=1 \
-DMYSQL_DATADIR=/usr/local/mysql/install/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/mysql/install/boost \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/install/tmp/mysql.sock \
&& make \
&& make install \
&& make clean

我原本以为CMAKE_INSTALL_PREFIX是用来指定构建目录的,尝试添加-DDESTDIR选项也没用,查文档也没找到明确的解释。

错误原因

这里的核心误解是混淆了构建目录和安装目录的区别:

  • CMAKE_INSTALL_PREFIX是指定make install执行时,最终把编译好的二进制、配置文件等复制到的目录,也就是程序的安装路径。
  • 而CMake的构建目录是你执行cmake命令时所在的目录,MySQL的源码明确禁止在源码目录(即存放CMakeLists.txt的目录)内进行构建,必须使用源码外构建(out-of-source build)。

源码外构建的优势正如错误提示所说:可以基于同一套源码构建多个不同配置的版本,清理构建产物时直接删除整个构建目录即可,比make clean更彻底。

解决方案

正确的做法是在源码目录之外创建一个空目录,切换到该目录后执行cmake,最后把源码目录的路径作为cmake的参数传入。我调整后的Docker命令如下,成功完成了构建:

WORKDIR /usr/local/mysql/
RUN cmake -- -j4 \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/install \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITHOUT_TOKUDB=1 \
-DMYSQL_DATADIR=/usr/local/mysql/install/data \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/mysql/install/boost \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/install/tmp/mysql.sock \
/usr/local/mysql-source/ \
&& make \
&& make install \
&& make clean

关键变化说明:

  1. 切换构建目录:先进入/usr/local/mysql/(这个目录和源码目录mysql-source平级,且是空目录),再执行cmake命令。
  2. 指定源码路径:把/usr/local/mysql-source/作为cmake命令的最后一个参数,告诉CMake去哪里找到MySQL源码的CMakeLists.txt。
  3. 并行构建参数:-- -j4是可选参数,用来指定用4核并行执行构建任务,加快编译速度,可以根据你的CPU核心数调整数值。

内容的提问来源于stack exchange,提问作者Stephane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:32