2013-03-08 1 views
2

정적 링크 boost.asio 외부 libs없이 내 작은 프로젝트에 (그것을 배포 할 수있는 단일 exe/bin 파일 만 있음). Boost.asio에는 Boost.system이 필요하며이 컴파일 방법을 알아 내려고 노력하고 있습니다. Boake.asio를 cmake와 함께 사용하는 방법?Boost.asio를 cmake와 함께 사용 하시겠습니까?

+0

모든 부스트 구성 요소를 정적으로 링크 할 수 있습니다. 너의 문제는 또 뭐야? –

+0

내가 왜 그것을 컴파일 할 수없는 몇 가지 문제를 찾을 때마다, 나는 많은 시간을 봤어. 그래서 나는 그것을 정확하게하는 방법을 질문했다. 나는 cmake로 부스트를 컴파일 할 수없고, 내 프로젝트에서 cmake를 정적으로 사용하는 법도 모른다. – Fedcomp

+2

'FindBoost.cmake'의 내용을 살펴보십시오. CMake 설치의'Modules /'dir에서 찾을 수 있습니다. – arrowd

답변

7

나는 실제 질문을 이해한다면 근본적으로 CMake에서 타사 라이브러리에 대해 정적으로 링크하는 방법을 묻습니다.

제 환경에서는 부스트를 /opt/boost에 설치했습니다.

가장 쉬운 방법은 CMake 설치에 제공 FindBoost.cmake을 사용하는 것입니다

set(BOOST_ROOT /opt/boost) 
set(Boost_USE_STATIC_LIBS ON) 
find_package(Boost COMPONENTS system) 

include_directories(${Boost_INCLUDE_DIR}) 
add_executable(example example.cpp) 
target_link_libraries(example ${Boost_LIBRARIES}) 

모든 부스트 라이브러리를 찾아 명시 ​​적으로 시스템 라이브러리에 링크 변종 :

set(BOOST_ROOT /opt/boost) 
set(Boost_USE_STATIC_LIBS ON) 
find_package(Boost REQUIRED) 

include_directories(${Boost_INCLUDE_DIR}) 
add_executable(example example.cpp) 
target_link_libraries(example ${Boost_SYSTEM_LIBRARY}) 

그렇게하지 않으면 적절한 부스트 설치가 있다면, 라이브러리에 정적으로 링크하는 두 가지 방법이 있습니다. 첫 번째 방법은 가져온 CMake 목표 만듭니다

add_library(boost_system STATIC IMPORTED) 
set_property(TARGET boost_system PROPERTY 
    IMPORTED_LOCATION /opt/boost/lib/libboost_system.a 
) 

include_directories(/opt/boost/include) 
add_executable(example example.cpp) 
target_link_libraries(example boost_system) 

을 그리고 대안은 명시 적으로 오히려 목표보다 target_link_libraries에 라이브러리를 나열하는 것입니다

include_directories(/opt/boost/include) 
add_executable(example example.cpp) 
target_link_libraries(example /opt/boost/lib/libboost_system.a) 
관련 문제