Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 切换分支时,如何保持CMake生成工件?_C++_Git_Makefile_Cmake - Fatal编程技术网

C++ 切换分支时,如何保持CMake生成工件?

C++ 切换分支时,如何保持CMake生成工件?,c++,git,makefile,cmake,C++,Git,Makefile,Cmake,我一直在研究LLVM,它使用CMake作为构建系统。我可以创建一个源代码外构建,如下所示: mkdir build cd build cmake .. make 当我在一个分支上工作时,这相当好,因为Make可以重用构建工件 但是,当我切换分支时,CMakeLists.txt文件可能已更改。为了确保我正在运行当前源代码的相应二进制代码,我运行: rm -rf build mkdir build cd build cmake .. make 这是低效的,因为我丢失了所有构建工件。理想情况下,C

我一直在研究LLVM,它使用CMake作为构建系统。我可以创建一个源代码外构建,如下所示:

mkdir build
cd build
cmake ..
make
当我在一个分支上工作时,这相当好,因为Make可以重用构建工件

但是,当我切换分支时,
CMakeLists.txt
文件可能已更改。为了确保我正在运行当前源代码的相应二进制代码,我运行:

rm -rf build
mkdir build
cd build
cmake ..
make
这是低效的,因为我丢失了所有构建工件。理想情况下,CMake只会重建已更改的内容


如何在切换分支的同时使用CMake实现增量构建,并保证构建的正确性

这就是我使用它的方式,我对它很满意(为简单起见,假设我在整个回购中有1个
CMakeLists.txt
):

/
/src
/src/repo1 (on branch1)
/build
/build/repo1_branch1
/build/repo1_branch2
所以当我想从
branch1

cd /src/repo1
git checkout branch1
cd /build/repo1_branch1
cmake /src/repo1
对于另一个分支,我将简单地替换两条中间线

此外,您还可以为发布和调试配置等创建更多文件夹


我意识到这种方式并不理想,但它显然是一致的,并且可以自动化。所以脚本将获取repo名称(根文件夹名称)、分支名称,在固定位置创建一个名为repo\u name+branch\u name的文件夹(如/build或ok/home/user/builds)去那里运行cmake。

根据我的经验,只要您没有跟踪所有依赖项的自定义生成步骤,cmake就可以正确地处理对CMakeLists.txt文件的更改。@GertWollny在添加或删除全局捕获的文件时,这是否起作用?这不需要重新生成生成文件吗?如果您更改了CMakeLists.txt,那么运行
make
应该首先重新运行
cmake
。这是否需要您从头开始每个生成文件夹?如果我只是检查一次分支以审查PR呢?是的,这意味着每个构建都从零开始。我的意思是,您可以始终使用生成覆盖文件,然后再次运行“主”生成。这将节省一些时间。您还可以复制主版本,运行“中间”版本,然后回滚主版本。。