CMake无法找到boost_asio

时间:2016-02-13 11:57:51

标签: c++ boost cmake

我正在尝试在我的新C ++项目中安装和使用Boost 1.60.0。 (我使用Ubuntu,CLion和CMake进行开发和构建)。

我做了什么?

  1. 我从网站上的link provided下载了Boost。
  2. 提取到/devenv/boost160(我重命名原始文件夹后,/devenv/boost160是根目录)
  3. 我从./bootstrap.sh运行了/devenv/boost160(一切正常;根据他们的official documentation,运行此参数不带参数,将输出转换为/usr/local)并且顺利进行。
  4. 我创建了一个CLion项目,并将以下内容添加到CMakeLists.txt
  5. set(BOOST_ROOT /usr/local/include/boost)
    set(BOOST_LIBRARYDIR /usr/local/lib)
    set(Boost_USE_MULTITHREAD ON)
    set(Boost_USE_STATIC_LIBS ON)
    set(Boost_DEBUG ON)
    
    find_package(Boost 1.60.0 REQUIRED COMPONENTS asio date_time)
    IF (Boost_FOUND)
        include_directories(${Boost_INCLUDE_DIR})
    endif()
    
    1. 我运行了CLion的 Build 命令,我得到了以下输出,基本上说它无法找到boost_asio
    2. /devenv/clion-1.1/bin/cmake/bin/cmake --build /home/victor/.clion11/system/cmake/generated/50ae3d2f/50ae3d2f/Debug0 --target all -- -j 8
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:549 ] _boost_TEST_VERSIONS = 
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:551 ] Boost_USE_MULTITHREADED = TRUE
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:553 ] Boost_USE_STATIC_LIBS = ON
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:555 ] Boost_USE_STATIC_RUNTIME = ON
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:557 ] Boost_ADDITIONAL_VERSIONS = 
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:559 ] Boost_NO_SYSTEM_PATHS = 
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:611 ] Declared as CMake or Environmental Variables:
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:613 ]   BOOST_ROOT = /usr/local/include/boost
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:615 ]   BOOST_INCLUDEDIR = 
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:617 ]   BOOST_LIBRARYDIR = /usr/local/lib
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:619 ] _boost_TEST_VERSIONS = 
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:712 ] location of version.hpp: /usr/local/include/boost/version.hpp
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:736 ] version.hpp reveals boost 1.60.0
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:822 ] guessed _boost_COMPILER = -gcc48
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:832 ] _boost_MULTITHREADED = -mt
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:875 ] _boost_RELEASE_ABI_TAG = -s
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:877 ] _boost_DEBUG_ABI_TAG = -sd
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:931 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH_boost_LIBRARY_SEARCH_DIRS_DEBUG   = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1043 ] Searching for ASIO_LIBRARY_RELEASE: boost_asio-gcc48-mt-s-1_60;boost_asio-gcc48-mt-s;boost_asio-mt-s-1_60;boost_asio-mt-s;boost_asio
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_RELEASE = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1085 ] Searching for ASIO_LIBRARY_DEBUG: boost_asio-gcc48-mt-sd-1_60;boost_asio-gcc48-mt-sd;boost_asio-mt-sd-1_60;boost_asio-mt-sd;boost_asio-mt;boost_asio
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_DEBUG = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1043 ] Searching for DATE_TIME_LIBRARY_RELEASE: boost_date_time-gcc48-mt-s-1_60;boost_date_time-gcc48-mt-s;boost_date_time-mt-s-1_60;boost_date_time-mt-s;boost_date_time
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_RELEASE = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1085 ] Searching for DATE_TIME_LIBRARY_DEBUG: boost_date_time-gcc48-mt-sd-1_60;boost_date_time-gcc48-mt-sd;boost_date_time-mt-sd-1_60;boost_date_time-mt-sd;boost_date_time-mt;boost_date_time
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_DEBUG = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
      -- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1151 ] Boost_FOUND = 1
      CMake Error at /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1245 (message):
        Unable to find the requested Boost libraries.
      
        Boost version: 1.60.0
      
        Boost include path: /usr/local/include
      
        Could not find the following static Boost libraries:
      
                boost_asio
      
        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:12 (find_package)
      
      
      -- Configuring incomplete, errors occurred!
      See also "/home/victor/.clion11/system/cmake/generated/50ae3d2f/50ae3d2f/Debug0/CMakeFiles/CMakeOutput.log".
      make: *** [cmake_check_build_system] Error 1
      

      在我的配置中如何在项目中使用Boost 1.60.0?谢谢!

1 个答案:

答案 0 :(得分:1)

Boost.Asio是一个仅限标头的库。用于定位Boost组件的标准CMake函数(FindBoost.cmake)仅考虑具有预构建库的组件作为组件,假设仅包含标头的组件与其余Boost标头一起安装完成。所以你应该使用find_package(Boost 1.60.0 REQUIRED date_time)(date_time实际上有预建库,可以通过FindBoost.cmake找到它。)

我说可以增强FindBoost.cmake以隐藏仅限标头库与应用程序开发人员真正的预构建库之间的差异。但是现在它是后者的责任。

编辑关于system_category的错误:您还需要Boost.System库,因此find_package调用应该看起来像find_package(Boost 1.60.0 REQUIRED date_time system),然后在target_link_libraries中使用Boost_SYSTEM_LIBRARY。不幸的是,Boost似乎仍然使用它自己的system_category实现,而后者是standardized in C++11