我的CMakeLists.txt使用CheckSymbolExists
来确定asm/unistd.h
中缺少哪些__NR_xyz系统调用数的定义。而以前它是在unistd.h
中查找的,这导致CMakeCache.txt中存储的HAVE_NR_XYZ定义不准确。
我可以通过删除CMakeCache.txt手动清除旧的不正确HAVE_NR_XYZ定义,但其他人仍将使用检查asm/unistd.h
的更新CMakeLists.txt和现有旧CMakeCache.txt进行增量构建。
如果CMakeLists.txt不包含某些定义(如HAVE_NR_XYZ或为此目的定义的其他内容),我可以通过编程方式从CMakeLists.txt中删除CMakeCache.txt吗?
或者我可以在CMakeLists.txt中指定另一种方法来删除旧的CMakeCache.txt文件,但前提是它们是在asm/unistd.h
修复之前生成的?
2条答案
按热度按时间yuvru6vn1#
我不认为想要删除CMake项目配置文件中的整个缓存文件是有意义的。该高速缓存的全部意义......就是一个缓存。如果我理解正确的话,缓存是在配置阶段开始时加载的,所以即使你在CMake配置中使用命令以编程方式删除它,你仍然需要再次运行configuration来查看效果。也就是说,它不是你可以在配置过程中“砍掉”的东西,然后它设置的变量都会神奇地被取消设置。CMake读取该文件并设置变量,如果你想取消设置,您需要手动取消设置每一个。
如果你想运行一个新的缓存,你可以也应该从调用configure命令开始。在CMake 3.24及更高版本中,你可以在configuration命令中使用
--fresh
运行一个新的缓存。从它的文档中:执行构建树的全新配置。这将删除所有现有的CMakeCache.txt文件和关联的CMakeFiles/目录,并从头开始重新创建它们。
如果你想对变量缓存进行细粒度的编辑,你可以使用
-U <globbing expr>
,或者使用一个交互式的缓存编辑应用程序。CMake自带了两个这样的交互式对话框:ccmake和cmake-gui。确保在编辑该高速缓存后再次运行配置。交互式对话框有按钮/键绑定来执行此操作,cmake --build
实际上可能足够智能,可以检测到需要进行重新配置。您的IDE可能还提供了一个CMake缓存编辑GUI(尽管质量可能不如CMake提供的GUI)。piok6c0g2#
使用
-U HAVE_NR_XYZ
运行cmake。这将重置CMakeCache.txt中的HAVE_NR_XYZ
。