Cmake가 Boost를 찾지 못함
CMake를 사용하여 프로젝트를 구성하려고하는데 지정된 폴더에 있어도 Boost 라이브러리를 찾지 못합니다. Boost_INCLUDE_DIR
, Boost_LIBRARYDIR
및 을 지정 BOOST_ROOT
했지만 CMake가 Boost를 찾을 수 없다는 오류가 계속 발생합니다. 그러한 오류의 원인은 무엇일까요?
올바른 방법으로하고 있습니까? 아이디어는 그 CMake 세트입니다 BOOST_INCLUDE_DIR
, BOOST_LIBRARYDIR
및 BOOST_ROOT
자동. 다음과 같이하십시오 CMakeLists.txt
.
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()
boost가 기본 위치에 설치되어 있지 않아 CMake에서 찾을 수없는 경우 다음과 같이 CMake에 부스트를 찾을 위치를 알릴 수 있습니다.
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/win32libs/boost")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/win32libs/boost/lib")
물론,이 두 라인은해야 전에FIND_PACKAGE(Boost)
에서 CMakeLists.txt
.
FindBoost.cmake
파일 자체 를 읽으면 더 많은 도움말을 볼 수 있습니다. 'Modules'디렉토리에 있습니다.
좋은 시작은 다음과 set(Boost_DEBUG 1)
같습니다. 이것은 부스트가 찾고있는 위치, 찾고있는 사항에 대한 많은 정보를 뱉어 내고 왜 그것을 찾을 수 없는지 설명하는 데 도움이 될 수 있습니다.
그것은 또한 그것이 당신을 BOOST_ROOT
적절하게 선택하고 있는지 알아내는 데 도움이 될 수 있습니다 .
FindBoost.cmake
사용 가능한 버전 변수에 정확한 부스트 버전이 나열되지 않은 경우에도 때때로 문제가 발생합니다. 자세한 내용은을 읽으십시오 FindBoost.cmake
.
마지막으로 FindBoost.cmake
과거에 몇 가지 버그가있었습니다. 시도 할 수있는 한 가지 방법 FindBoost.cmake
은 최신 버전의 CMake에서 최신 버전을 가져 와서 프로젝트 폴더에 붙여 넣는 것입니다. CMakeLists.txt
그러면 이전 버전의 boost가 있더라도 해당 버전의 새 버전을 사용합니다 FindBoost.cmake
. 프로젝트 폴더.
행운을 빕니다.
나는 잠시 동안이 문제로 어려움을 겪었습니다. cmake
Boost의 명명 규칙을 사용하여 Boost 라이브러리 파일을 찾고 있는 것으로 밝혀졌습니다 . 라이브러리 이름은 빌드에 사용 된 컴파일러 버전의 함수입니다. 우리의 Boost 라이브러리는를 사용하여 빌드 GCC 4.9.1
되었으며 그 컴파일러 버전은 실제로 우리 시스템에 존재했습니다. 그러나 GCC 4.4.7
우연히 설치되었습니다. 실제로 cmake의 FindBoost.cmake
스크립트는 GCC 4.4.7
설치가 아닌 설치를 자동 감지 GCC 4.9.1
하므로 gcc44
파일 이름에 " gcc49
" 가 아닌 " " 가있는 Boost 라이브러리 파일을 찾고있었습니다 .
간단한 수정은 Boost_COMPILER
에서 " -gcc49
" 로 설정 하여 cmake가 GCC 4.9가 있다고 가정하도록하는 것 입니다 CMakeLists.txt
. 이 변경으로 FindBoost.cmake
내 Boost 라이브러리 파일을 찾고 찾았습니다.
올바른 버전 부스트 헤더의 위치를 전달 -DBOOST_INCLUDEDIR
하거나 -DBOOST_ROOT
가리켜 CMake에서 사용할 Boost 버전을 지정할 수도 있습니다.
예:
cmake -DBOOST_ROOT=/opt/latestboost
이는 여러 부스트 버전이 동일한 시스템에있을 때도 유용합니다.
자신의 부스트를 구축하는 경우 --layout = versioned를 사용하는 것을 잊지 마십시오. 그렇지 않으면 특정 버전의 라이브러리 검색이 실패합니다.
나는 또한 비슷한 문제가 있었고 BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR 및 BOOST_ROOT 환경 변수가 절대 경로 를 보유해야 함을 발견했습니다 . HTH!
cmake 버전 3.1.0-rc2가 부스트 1.57을 선택하려면 -D_boost_TEST_VERSIONS = 1.57을 지정하십시오.
cmake 버전 3.1.0-rc2는 -DBoost_DEBUG = ON을 사용하여 볼 수 있듯이 기본적으로 boost <= 1.56.0입니다.
cmake -D_boost_TEST_VERSIONS = 1.57 -DBoost_DEBUG = ON -DCMAKE_BUILD_TYPE = 디버그 -DCMAKE_C_COMPILER = clang -DCMAKE_CXX_COMPILER = clang ++
make
Ubuntu Trusty64에 Boost 버전 1.66.0을 설치 한 후 프로젝트 를 실행하는 동안 동일한 문제가 발생 했습니다. 오류 메시지는 다음과 유사합니다 (정확히 같지는 않음).
CMake Error at
/usr/local/Cellar/cmake/3.3.2/share/cmake/Modules/FindBoost.cmake:1245 (message):
Unable to find the requested Boost libraries.
Boost version: 0.0.0
Boost include path: /usr/include
Detected version of Boost is too old. Requested version was 1.36 (or newer).
Call Stack (most recent call first):
CMakeLists.txt:10 (FIND_PACKAGE)
Boost가 확실히 설치되었지만 CMake가 감지하지 못했습니다. 경로 및 환경 변수를 수정하는 데 많은 시간을 보낸 후 결국 cmake
옵션을 확인하고 다음을 발견했습니다.
--check-system-vars = Find problems with variable usage in system files
그래서 문제가되는 디렉토리에서 다음을 실행했습니다.
sudo cmake --check-system-vars
반환 된 :
Also check system files when warning about unused and uninitialized variables.
-- Boost version: 1.66.0
-- Found the following Boost libraries:
-- system
-- filesystem
-- thread
-- date_time
-- chrono
-- regex
-- serialization
-- program_options
-- Found Git: /usr/bin/git
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/myproject
문제를 해결했습니다.
One more bit of advice for anyone trying to build CGAL in particular, with statically linked Boost. It is not enough to define Boost_USE_STATIC_LIBS
; it gets overridden by the time Boost_DEBUG
outputs its value. The thing to do here is to check the "Advanced" checkbox and to enable CGAL_Boost_USE_STATIC_LIBS
.
참고URL : https://stackoverflow.com/questions/3808775/cmake-doesnt-find-boost
'developer tip' 카테고리의 다른 글
내 Eclipse 프로젝트에 팬텀 디버거 중단 점이있는 이유는 무엇입니까? (0) | 2020.10.26 |
---|---|
__str__ 및 __repr__의 목적은 무엇입니까? (0) | 2020.10.26 |
@ URL.Action () 내에서 자바 스크립트 변수에 액세스하는 방법 (0) | 2020.10.26 |
jquery를 사용하여 라디오 그룹에서 값 가져 오기 (0) | 2020.10.26 |
컨테이너가 메모리 제한을 초과하여 실행 중입니다. (0) | 2020.10.26 |