2017-01-04 12 views
0

皆さん、私はここで少し問題に直面しています。基本的に、私はこの素晴らしいライブラリhttps://github.com/socketio/socket.io-client-cppをCMakeでビルドしようとしています。build socket.io C++にboostライブラリがあります

まず最初に、私は必須としてboostをインストールし、opt/local/include/boostとopt/local/libに行きました。しかし問題は、CMakeが必要なブーストライブラリを見つけることができなかったことです。 Configure後cmakeのは、私にそのログを与えた:私はその問題に直面したら

not define build type, set to release 
CMake Error at /Applications/CMake.app/Contents/share/cmake-3.6/Modules/FindBoost.cmake:1753 (message): 
    Unable to find the requested Boost libraries. 

    Boost version: 1.59.0 

    Boost include path: /opt/local/include 

    Could not find the following static Boost libraries: 

      boost_date_time 
      boost_random 

    Some (but not all) of the required Boost libraries were found. You may 
    need to install these additional Boost libraries. Alternatively, set 
    BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT 
    to the location of Boost. 
Call Stack (most recent call first): 
    CMakeLists.txt:23 (find_package) 

を、私は手にセットアップBOOST_LIBRARYDIRしようとしたが、それはどちらか動作しませんでした。私はここに任意の助けに感謝

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) 
PROJECT(sioclient) 

option(BUILD_SHARED_LIBS "Build the shared library" OFF) 
option(Boost_USE_STATIC_LIBS "Use Boost static version" ON) 

set(MAJOR 1) 
set(MINOR 6) 
set(PATCH 0) 

if(NOT CMAKE_BUILD_TYPE) 
MESSAGE(STATUS "not define build type, set to release") 
set(CMAKE_BUILD_TYPE Release) 
elseif(NOT (${CMAKE_BUILD_TYPE} STREQUAL "Release" OR ${CMAKE_BUILD_TYPE} STREQUAL "Debug")) 
MESSAGE(SEND_ERROR "CMAKE_BUILD_TYPE must be either Release or Debug") 
return() 
endif() 

set(BOOST_VER "1.55.0" CACHE STRING "boost version") 

set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost ${BOOST_VER} REQUIRED COMPONENTS system date_time random) 

aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) 
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) 
file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) 
set(SIO_INCLUDEDIR ${CMAKE_CURRENT_LIST_DIR}) 

add_library(sioclient ${ALL_SRC}) 
target_include_directories(sioclient PRIVATE ${Boost_INCLUDE_DIRS} 
    ${CMAKE_CURRENT_LIST_DIR}/src 
    ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp 
    ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include 
) 

set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) 
set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) 
target_link_libraries(sioclient PRIVATE ${Boost_LIBRARIES}) 
if(BUILD_SHARED_LIBS) 
set_target_properties(sioclient 
    PROPERTIES 
     SOVERSION ${MAJOR} 
     VERSION ${MAJOR}.${MINOR}.${PATCH} 
    ) 
endif() 
list(APPEND TARGET_LIBRARIES sioclient) 

find_package(OpenSSL) 
if(OPENSSL_FOUND) 
add_library(sioclient_tls ${ALL_SRC}) 
target_include_directories(sioclient_tls PRIVATE ${Boost_INCLUDE_DIRS} 
    ${CMAKE_CURRENT_LIST_DIR}/src 
    ${CMAKE_CURRENT_LIST_DIR}/lib/websocketpp 
    ${CMAKE_CURRENT_LIST_DIR}/lib/rapidjson/include 
    ${OPENSSL_INCLUDE_DIR} 
) 

set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD 11) 
set_property(TARGET sioclient_tls PROPERTY CXX_STANDARD_REQUIRED ON) 
target_link_libraries(sioclient_tls PRIVATE ${Boost_LIBRARIES} ${OPENSSL_LIBRARIES}) 
target_compile_definitions(sioclient_tls PRIVATE -DSIO_TLS) 
if(BUILD_SHARED_LIBS) 
set_target_properties(sioclient_tls 
    PROPERTIES 
     SOVERSION ${MAJOR} 
     VERSION ${MAJOR}.${MINOR}.${PATCH} 
    ) 
endif() 
list(APPEND TARGET_LIBRARIES sioclient_tls) 

endif() 

install(FILES ${ALL_HEADERS} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/include" 
) 

install(TARGETS ${TARGET_LIBRARIES} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" 
) 

install(FILES ${Boost_LIBRARIES} 
    DESTINATION "${CMAKE_CURRENT_LIST_DIR}/build/lib/${CMAKE_BUILD_TYPE}" 
) 

、男:

は、ここで私は失敗してコンパイルしようとしたライブラリと行くcmakeのファイルです!そして1つの観察:もし私が間違っていなければ、それはrandomという名前のincludeフォルダにあるboost_randomを見つけようとします。多分それは問題ですか?

+0

あなたのboostインストールが不完全であるように見えます( ''以下の静的なBoostライブラリを見つけることができませんでした: ')。 – nightuser

+0

Boostライブラリを静的に構築したことを確認してください(デフォルトで無効にすることができます)。 – nightuser

答えて

0

静的バージョンのBoostライブラリをビルドしていないとします。

あなたはBoost.Build(b2プログラム)を使用して、ブーストを構築した場合は、動的および静的の両方のライブラリが構築されるように、あなたは、link=static,shared(実行b2 link=static,shared <other_flags>)フラグを設定して、それを再コンパイルする必要があります。

UPD:また、このプロジェクトのREADMEを使用すると、指定された適切なブーストバージョンでcmake -DBOOST_ROOT:STRING=/opt/local -DBOOST_VER:STRING=<your boost version> ./であなたにCMakeを実行する必要があることを述べています。

+0

こんにちは、ナイトユーザー!さて、私はそれをショットし、すぐにあなたに戻ってきます。アドバイスありがとう! –

関連する問題