2017-11-09 7 views
0

프로젝트를 빌드 할 때 Boost_LIBRARIES에는 program_options가 포함되어 있지 않지만 필수 요소는 있습니다. 수동으로 추가하면 제대로 작동합니다. 내 CMake에 포함 된 다음Boost_LIBRARIES에는 program_options이 포함되어 있지 않습니다.

find_package(Boost 1.60.0 REQUIRED COMPONENTS program_options thread system regex) 
message("${Boost_LIBRARIES}") 
include_directories(include ${Boost_INCLUDE_DIRS}) 
link_directories(${Boost_LIBRARY_DIRS}) 
target_link_libraries (proj ${Boost_LIBRARIES} boost_program_options) 

CMake 라이브러리가 발견 된 주장하지만, 그것은 현대 CMake에 대한 코드를 다시 작성 message("${Boost_LIBRARIES}")

+0

무엇 CMake 버전 당신은 사용합니까? – zaufi

답변

1

에 호출에 나열되지 않은 :

find_package(Boost 1.60.0 REQUIRED COMPONENTS program_options thread system regex) 

add_executable(proj ...) 
target_link_libraries(proj Boost::program_options ...) 

을 그리고 그 결과로 Boost_BLAH_LBAH 변수와 include_directories + link_directories을 잊어 버리십시오.

부스트 파인더에서 오류가 발생하면 -DBoost_DEBUG=ONcmake 명령 줄에 추가하십시오. smth가 잘못되었을 경우 (임의/일반) find_package-DCMAKE_FIND_DEBUG_MODE=ON을 추가하십시오.

는 영감을 참조 : https://steveire.wordpress.com/2017/11/05/embracing-modern-cmake/

+0

나는 Cmake v 2.8을 사용하고있다. 'add_executable' 행을 가지고 있지만 Boost 관련 항목 만 표시하기로했습니다. 연계에서'Boost ::'문법을 사용할 수 있는지는 몰랐지만, 필자는'$ {Boost_LIBRARIES}'만으로는 그 일을 할 수 없었습니다. 각 구성 요소를 선언하는 것보다 하나의 부스트 관련 링크를 배치하는 것이 훨씬 더 우아하다고 생각합니다. 본질적으로,'boost_program_options'을 없애려면 어떻게해야합니까? –

+0

'add_library (... IMPORTED ...)'가 있으면 버전 (2.8.what? .12?)이 포함 된'FindBoost.cmake'를 살펴보십시오. 그렇다면 변수 대신 _imported targets_를 사용할 수 있습니다. – zaufi

+0

Boost에 연결된 프로젝트에서 유일한 타겟을 가지고 있다면'$ {Boost_LIBRARIES}'는 "괜찮습니다"(가져온 타겟이없는 오래된 CMake의 경우)입니다. 그렇지 않다면, 내 IMHO는 항상 $ {Boost_ _LIBRARY}'를 사용하여 특정 타겟이 링크 된 라이브러리를 명시 적으로 제어하는 ​​것이 좋습니다. – zaufi