【发布时间】:2019-02-09 14:46:41
【问题描述】:
我正在尝试从源代码构建 MySQL,但遇到了配置错误:
CMake Error at CMakeLists.txt:283 (MESSAGE):
Please do not build in-source. Out-of source builds are highly
recommended: you can have multiple builds for the same source, and there is
an easy way to do cleanup, simply remove the build directory (note that
'make clean' or 'make distclean' does *not* work)
You *can* force in-source build by invoking cmake with
-DFORCE_INSOURCE_BUILD=1
-- Source directory /usr/local/mysql-source
-- Binary directory /usr/local/mysql-source
-- Configuring incomplete, errors occurred!
See also "/usr/local/mysql-source/CMakeFiles/CMakeOutput.log".
The command '/bin/sh -c 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' returned a non-zero code: 1
我认为CMAKE_INSTALL_PREFIX 选项应该正是这样做的,即指定二进制安装目录。
这是我的构建命令:
RUN apt-get install -y libncurses-dev
COPY mysql-8.0.15.tar.gz /usr/local/
WORKDIR /usr/local
RUN gzip -d mysql-8.0.15.tar.gz \
&& tar -xvf mysql-8.0.15.tar \
&& mv mysql-8.0.15 mysql-source
RUN mkdir mysql
WORKDIR /usr/local/mysql/
RUN mkdir install \
&& mkdir install/data \
&& mkdir install/var \
&& mkdir install/etc \
&& mkdir install/tmp
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 选项没有这样做,也没有任何其他选项。
我希望不必像在 Docker 环境中那样编辑 Makefile。
我尝试添加 -DDESTDIR=/usr/local/mysql/install \ 选项,但问题仍然完全相同。
cmake documentation 对我没有帮助。
更新:按照提供的解决方案,我可以使用命令成功构建:
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
-- -j4 选项在这里是可选的,因为它只告诉 cmake 使用计算机的 4 个内核。
【问题讨论】:
-
你的意思是
cmake -H. -Bdir -G"Unix Makefiles"其中-H选项是源目录,-B选项是构建目录(可能是绝对路径)?在较新的 CMake 版本中,-H和-S表示相同。 -B 如果 builddir 不存在,也会创建它。 -
我的意思是 cmake 带有我在问题中列出的选项。
-
变量
CMAKE_INSTALL_PREFIX指定 install 目录,而不是 build 目录。构建目录是调用cmake的目录,在这种情况下,源目录可能由非选项参数给出。或者,您可以使用-B选项指定构建目录,如@vre 所述。
标签: cmake