【问题标题】:After an in-source build, how to force CMake to build someplace else?在源代码构建之后,如何强制 CMake 在其他地方构建?
【发布时间】:2019-07-02 20:41:51
【问题描述】:
假设我有一个名为foo 的项目,其源代码位于/foo/src 下。还假设在过去的某个时间,有人跑了cmake /foo/src,所以那里有构建文件。
现在,我想在/foo/build 中执行foo 的构建。但是如果我cd /foo/build; cmake /foo/src - 它会将/foo/src 视为构建目录,并在那里而不是在当前目录中配置和生成构建文件。
问题:
- 为了让 cmake 在
/foo/build 中配置和生成构建文件,要删除 /foo/src 中的最小文件集是多少?
- 我可以强制 cmake 使用
/foo/build 而不删除 /foo/src 中的任何内容吗?
【问题讨论】:
标签:
cmake
directory-structure
building
【解决方案1】:
1。有足够的文件要删除
要删除的足够多的文件集,尽管可能不是最少的:
CMakeCache.txt
Makefile
cmake_install.cmake
CMakeFiles/
如果您还启用了测试,那么
CTestTestfile.cmake
Testing/
tests/CTestTestfile.cmake
tests/Makefile
tests/cmake_install.cmake
tests/CMakeFiles/
2。如何在不删除的情况下强制使用不同的构建位置:
如果你执行
cmake -B/foo/build -H/foo/src
CMake 将忽略之前的构建并在/foo/build 下构建。发出此命令时,您不需要将其作为当前工作目录。
这个答案的第二部分其实可以在this answer中找到