[boost] 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가 찾고있는 위치, 찾고있는 항목에 대한 많은 정보를 뱉어 내고 왜 찾을 수 없는지 설명하는 데 도움이 될 수 있습니다.

그것은 또한 그것이 당신을 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 라이브러리 파일을 찾고있었습니다 .

간단한 수정은 다음을 설정하여 cmake가 GCC 4.9가 있다고 가정하도록하는 것입니다. Boost_COMPILER 에서 ” -gcc49” 하여 입니다 CMakeLists.txt. 이 변경으로 FindBoost.cmake내 Boost 라이브러리 파일을 찾고 찾았습니다.


답변

-DBOOST_INCLUDEDIR또는 전달하여 CMake에서 사용할 Boost 버전을 지정할 수도 있습니다.-DBOOST_ROOT올바른 버전 부스트 헤더의 위치를 가리켜 있습니다.

예:

cmake -DBOOST_ROOT=/opt/latestboost

이는 여러 부스트 버전이 동일한 시스템에있을 때도 유용합니다.


답변

나는 또한 비슷한 문제가 있었고 BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR 및 BOOST_ROOT 환경 변수가 절대 경로 를 보유해야 함을 발견했습니다 . HTH!


답변

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

문제를 해결했습니다.


답변

cmake 버전에 대한 3.1.0-rc2데리러 boost 1.57지정-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2기본값 boost<=1.56.0은 다음을 사용하여 표시됩니다.-DBoost_DEBUG=ON

cmake -D_boost_TEST_VERSIONS=1.57 -DBoost_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++