清除CMake的内部缓存

6
我确定有一个简单的命令可以完成这个操作。
我手动在 /usr/local 安装了 opencv 2.4.3。
然后,我将它移除,并从arch社区安装了OpenCV 2.4.5(我正在使用Arch linux),它被安装在 /usr 上。
现在,当我尝试在cmake工程中使用OpenCV时,cmake返回来自 /usr/local 的旧路径。
我进行了一些挖掘,并发现如果我从 /usr/share/opencv/OpenCVConfig.cmake 文件的以下行中移除 "CACHE": get_filename_component(OpenCV_CONFIG_PATH ="${CMAKE_CURRENT_LIST_FILE}" PATCH CACHE) 我就会得到正确的路径。
这指向我的问题。 我该如何清除cmake缓存? 我指的是cmake的内部缓存,而不是应用程序的缓存,后者可以通过删除CMakeCache.txt来删除。 是否有命令? 或者cmake缓存目录/文件在哪里? 我确定有一个简单的答案。 我知道如何设置/取消设置CACHE变量,但不知道如何清除完整的缓存。

7
你可以从构建目录中删除CMakeCache.txt文件。 - vinograd47
5
CMake唯一维护的缓存是存储在您构建目录中的CMakeCache.txt文件。没有系统范围的缓存。 - Peter
2
你确定吗?我已经通过删除CMakeCache.txt清除了应用程序的缓存,事实上,我还清除了构建目录。如果你读过我的问题,你会发现当我修改OpenCVConfig.cmake文件(与我的应用程序无关)并删除文本“CACHE”时,cmake的行为会发生变化。我也在cmake的文档中读到,每次调用cmake时都会调用get_filename_component()。即使应用程序的缓存被清除,cmake仍然报告OpenCV库的错误路径(/usr/local/lib/lib_opencv而不是/usr/lib/lib_opencv),所以cmake一定在某个地方存储了旧值? - Richard Macwan
1
你正在使用的查找openCV的工具可能会先查看/usr/local而不是/usr。你尝试过删除/重命名/移动/usr/local下的opencv吗? - grim
问题出在pkg-config的设置上。我没有删除旧的.pc文件并调整PKG_CONFIG_PATH。 - Richard Macwan
显示剩余2条评论
2个回答

1
问题出在pkg-config的设置上。我没有删除旧的.pc文件并调整PKG_CONFIG_PATH。pkg-config使用的是/usr/local/lib/pkgconfig中存在的opencv.pc文件,而不是/usr/lib/pkgconfig中存在的文件。我认为cmake内部没有任何缓存。

1
即使缓存文件被删除,仍然有一些内部缓存会保留一些设置,但在CMake未打开的情况下删除缓存文件可以解决可能出现的问题。 - JulianHzg

0
重新编译依赖库解决了我的问题。
我有一个依赖于Opencv的项目。当我还在使用Xcode 7.2beta时,MacOSX的SDK路径是"/Applications/xcode7.2beta.app/Content/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk"。 因此,cmake将生成并编译位于"/Applications/xcode7.2beta.app/"下的MacOSX10.11.sdk的opencv库。
几天前,我将xcode升级到了8.0,新的xcode和其SDK路径为"/Applications/xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk"。但无论如何,当cmake生成我的项目时,对opencv的引用始终指向旧的xcode。
后来我意识到opencv是使用旧的Xcode生成的,所以我使用新的Xcode重新编译了opencv,并且我的项目正确编译了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接