2017-01-04 105 views
0

伙计们,我在这里遇到了一些小问题。基本上,我试图用CMake来构建这个美好的库https://github.com/socketio/socket.io-client-cpp使用boost库构建socket.io C++

首先,我根据需要安装了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的文件与库中去,我不成功试图编译:

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}" 
) 

我在这里感谢所有帮助,伙计们!还有一个观察:如果我没有错,它试图找到boost_random当在include文件夹中它有名字random。也许这就是问题所在?

+0

看起来你的增强安装是不完整的('无法找到以下静态Boost库:')。 – nightuser

+0

确保已经静态构建Boost库(默认情况下可以禁用它)。 – nightuser

回答

0

我想,你还没有建立静态版本的Boost库。

如果你使用Boost.Build(b2程序)内置升压,那么你应该link=static,shared重新编译(运行b2 link=static,shared <other_flags>)标志设置,使动态和静态库将建成。

更新:此外,该项目的自述文件说,你应该运行你的CMake与cmake -DBOOST_ROOT:STRING=/opt/local -DBOOST_VER:STRING=<your boost version> ./与指定适当的升压版本。

+0

你好,夜莺!好的,我会尽快给你回复。谢谢你的建议! –