首页 > 解决方案 > 如何在不删除和重新创建构建目录的情况下从头开始重新运行 CMake

问题描述

有没有办法让 CMake 做一个 distclean?

例如,我创建了一个构建目录,并cmake在其中运行。然后我对 CMakeLists.txt 进行更改,然后重新运行 CMake。目前尚不清楚这是否会导致使用我的更改,或者 CMake 是否只是从缓存中获取答案。

所以我删除了构建目录,重新创建它,然后cmake再次运行。

有没有办法在 CMake 中完成此操作而不删除构建目录?是否有与标准 distclean 目标等效的目标?

标签: cmake

解决方案


这就是 CMake 预定义目标ZERO_CHECK的用途。它是一个构建系统再生目标。当您编译一个预先存在的 CMake 项目时,ZERO_CHECK应始终首先运行目标以检查自上次构建以来您的任何CMake 文件是否已更改。如果有,CMake 将使用您最新的 CMake 文件重新运行并重新生成构建系统。

你只需要小心缓存的变量。这些在代码中看起来像这样,并且通常出现在 CMake GUI 显示中以便于编辑:

set(MY_VAR "ExampleString" CACHE STRING "My string variable")

该文档指出:

由于缓存条目旨在提供用户可设置的值,因此默认情况下不会覆盖现有的缓存条目。使用FORCE选项覆盖现有条目。

缓存变量将保留其原始值,除非您通过将FORCE属性添加到set()上面的命令、使用unset()命令或从缓存中删除它们来显式更改或取消设置它们。因此,将字符串更改MY_VAR为代码中的其他内容:

set(MY_VAR "OtherString" CACHE STRING "My string variable")

不会改变变量的值,因为原始字符串是缓存的。您可以从 CMake GUI 窗口中从缓存中删除变量(或修改缓存的值),或者通过手动修改CMakeCache.txtCMake 构建文件夹中的文件。


如果您正在寻找一种快速删除和重新创建构建目录的方法,只需删除CMakeCache.txt构建文件夹中的文件即可达到相同的效果。


推荐阅读