developer tip

Cmake가 Boost를 찾지 못함

copycodes 2020. 10. 26. 08:07
반응형

Cmake가 Boost를 찾지 못함


CMake를 사용하여 프로젝트를 구성하려고하는데 지정된 폴더에 있어도 Boost 라이브러리를 찾지 못합니다. Boost_INCLUDE_DIR, Boost_LIBRARYDIR을 지정 BOOST_ROOT했지만 CMake가 Boost를 찾을 수 없다는 오류가 계속 발생합니다. 그러한 오류의 원인은 무엇일까요?


올바른 방법으로하고 있습니까? 아이디어는 그 CMake 세트입니다 BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRBOOST_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. 프로젝트 폴더.

행운을 빕니다.


나는 잠시 동안이 문제로 어려움을 겪었습니다. cmakeBoost의 명명 규칙을 사용하여 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 ++


makeUbuntu 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

반응형