Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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++ 如何在windows上更新已安装库的位置?_C++_Windows_Cmake - Fatal编程技术网

C++ 如何在windows上更新已安装库的位置?

C++ 如何在windows上更新已安装库的位置?,c++,windows,cmake,C++,Windows,Cmake,我以前是通过“cmake..”、“make”和“makeinstall”安装zlib库的。通过调用CMakeLists.txt中的函数“find_package(zlib)”,默认安装位置为“C:\Program Files(x86)\zlib”。CMakeLists.txt的内容如下: cmake_minimum_required(VERSION 2.4.4) project(zlib C) find_package(ZLIB) message(STATUS "Found") message

我以前是通过“cmake..”、“make”和“makeinstall”安装zlib库的。通过调用CMakeLists.txt中的函数“find_package(zlib)”,默认安装位置为“C:\Program Files(x86)\zlib”。CMakeLists.txt的内容如下:

cmake_minimum_required(VERSION 2.4.4)
project(zlib C)

find_package(ZLIB)
message(STATUS "Found")
message(STATUS "    ${ZLIB_INCLUDE_DIRS}")
现在,我通过“cmake-G”MinGW Makefiles“-DCMAKE\u INSTALL\u PREFIX:PATH=D:/TEST\u ZLIB/。”重新安装这个库,结果如下

E:\Code\cpp\zlib-1.2.11\build>make install
[ 41%] Built target zlib
[ 46%] Built target minigzip64
[ 85%] Built target zlibstatic
[ 90%] Built target example
[ 95%] Built target minigzip
[100%] Built target example64
Install the project...
-- Install configuration: ""
-- Installing: D:/TEST_ZLIB/lib/libzlib.dll.a
-- Installing: D:/TEST_ZLIB/bin/libzlib.dll
-- Installing: D:/TEST_ZLIB/lib/libzlibstatic.a
-- Installing: D:/TEST_ZLIB/include/zconf.h
-- Installing: D:/TEST_ZLIB/include/zlib.h
-- Installing: D:/TEST_ZLIB/share/man/man3/zlib.3
-- Installing: D:/TEST_ZLIB/share/pkgconfig/zlib.pc
但是,函数find_package(zlib)仍然报告以前的位置:

E:\Code\cpp\test_cmake\build>cmake ..
-- Found
--     C:/Program Files (x86)/zlib/include
-- Configuring done
-- Generating done
-- Build files have been written to: E:/Code/cpp/test_cmake/build

如何更新此库的位置?任何帮助都将不胜感激。

调用
find_package()
的结果是缓存的,因此第二次运行它实际上不会搜索,而是使用缓存的值

CMake缓存包含在二进制目录中的
CMakeCache.txt
文件中。因此,force
find_package
有3种可能再次搜索:

  • 删除整个二进制目录

    下一次调用
    cmake
    将是“新鲜的”:它将搜索编译器、所有需要的包,等等

  • 从二进制目录中删除
    cmakcache.txt
    文件

    下一次调用
    cmake
    将是“新鲜的”,与第一种情况相同

  • cmakcache.txt
    中删除与您的包相对应的

    例如,对于force
    find_package(ZLIB)
    再次搜索,您可以删除子字符串“ZLIB”(不区分大小写)中包含的所有条目

    下一次调用
    cmake
    将使用编译器和其他包的缓存设置,但再次搜索ZLIB

  • 3d变体需要稍微多一些动作,但会导致更快的
    cmake
    调用

    第一种和第二种变体易于执行,其效果几乎相同。它们都会导致“slow”
    cmake
    调用,需要再次执行所有检查。但您可以确定,在不一致的情况下,不会保留缓存设置

    进行故障排除时,请始终选择第一个或第二个车型