이전에 "cmake ..", "make"및 "make install"로 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_INSTALL_PREFIX : PATH = D : / TEST_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
바이너리 디렉토리에있는 파일에 포함되어 있습니다. 따라서 강제 find_package
로 다시 검색 할 수있는 세 가지 가능성이 있습니다 .
전체 바이너리 디렉토리를 제거 합니다 .
다음 호출은 cmake
"새로운"것입니다. 컴파일러, 필요한 모든 패키지 등을 검색합니다.
CMakeCache.txt
바이너리 디렉토리에서 파일을 제거 합니다.
다음 호출은 cmake
첫 번째 경우와 동일하게 "새로" 호출 됩니다.
에서 CMakeCache.txt
제거 라인을 , 패키지에 맞습니다.
예를 들어, 강제 find_package(ZLIB)
로 다시 검색하려면 "zlib"(대소 문자 구분 안 함) 하위 문자열이 포함 된 모든 항목을 제거 할 수 있습니다.
다음 호출은 cmake
컴파일러, 기타 패키지에 대해 캐시 된 설정을 사용하지만 ZLIB를 다시 검색합니다.
3d 변형에는 약간 더 많은 작업이 필요하지만 cmake
호출 속도가 빨라 집니다.
1 차 및 2 차 변형은 수행하기 쉽고 그 효과는 거의 동일합니다. 둘 다 "느린" cmake
호출이 발생하므로 모든 검사를 다시 수행해야합니다. 그러나 일관성이없는 경우 캐시 된 설정을 그대로 두지 않을 것입니다.
문제를 해결할 때 항상 1 차 또는 2 차 변형을 선택하십시오!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다