是否有指定了源二进制目录的cmake的选择吗? [重复]

问题描述 投票:0回答:1

这个问题已经在这里有一个答案:

我试图从源代码编译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选项并没有这样做,也不是是否有任何其他选项。

我希望不要有编辑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
1个回答
0
投票

CMake的抱怨,你正在试图建立MySQL的源代码树,因此玷污它的事实。一个典型的例子是使用一个单独的builddir(可能位于源文件目录下,但不一定需要)。 CMAKE_INSTALL_PREFIX就是成功构建后的二进制文件安装的地方。

创建您的解决方案

cmake -Hsourcedir -Bbuilddir ....<all your options>

CMake的将创建builddir如果它不存在。在你的情况,这可能从目前的源代码目录可以这样调用

cmake -H. -Bbuilddir ....<all your options>

较新版本的CMake知道这是为与后-S然后cmake的构建工具模式来非常得心应手-H选项。

cmake --build builddir --target all --config Release -- -j4

它使用平台的默认构建工具(在你的情况做)。 (给予特殊的选项尾随--后的构建工具,在这种情况下-j4用于并行编译)

安装然后被做

cmake --build builddir --target install --config Release

据我所知,如果你省略--config Releaseoption CMake的将使用在配置的时候无论是从CMAKE_BUILD_TYPE或命令行中指定的CMakeLists.txt

然后,您的整个RUN命令将如下所示:

RUN cd /usr/local/mysql-source/ \
  && cmake -H. -Bbuilddir \
  -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 \
  && cmake --build builddir --target all \
  && cmake --build builddir --target install \
  && cmake --build builddir --target clean
© www.soinside.com 2019 - 2024. All rights reserved.