cmake - 如何在不删除和重新创建构建目录的情况下从头开始重新运行 CMake
问题描述
有没有办法让 CMake 做一个 distclean?
例如,我创建了一个构建目录,并cmake
在其中运行。然后我对 CMakeLists.txt 进行更改,然后重新运行 CMake。目前尚不清楚这是否会导致使用我的更改,或者 CMake 是否只是从缓存中获取答案。
所以我删除了构建目录,重新创建它,然后cmake
再次运行。
有没有办法在 CMake 中完成此操作而不删除构建目录?是否有与标准 distclean 目标等效的目标?
解决方案
这就是 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.txt
CMake 构建文件夹中的文件。
如果您正在寻找一种快速删除和重新创建构建目录的方法,只需删除CMakeCache.txt
构建文件夹中的文件即可达到相同的效果。
推荐阅读
- reactjs - HashRouter with BrowserRouter combined
- azure-sql-database - Azure 逻辑应用:当 SQL 查询不返回任何数据行时,将条件设置为 False
- javascript - 认证后开始执行方法
- reactjs - 导航 - 无法读取未定义的属性“导航”
- sql - SQL Server 中的存储过程,带有选择查询然后 if 条件然后插入查询
- java - 如何获取单元格的列字母?
- reactjs - Gatsby:将组件导入到 src 文件夹之外的 mdx 文件中
- javascript - 我想在单击删除图像时显示弹出模式
- linux - 错误 CoreDNS 所需的最低内核版本为 4.14.35 (UEKR5)
- excel - Excel vba vlookup不返回值