欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Boost库使用记录

程序员文章站 2022-05-31 21:46:11
...

问题

Q: 通过cmake使用boost库的时候,报了错误如下:

  CMake Warning (dev) at /usr/local/lib/cmake/Boost-1.74.0/BoostConfig.cmake:240 (if):
  Policy CMP0057 is not set: Support new IN_LIST if() operator.  Run "cmake
  --help-policy CMP0057" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  	IN_LIST will be interpreted as an operator when the policy is set to NEW.
  Since the policy is not set the OLD behavior will be used.
	Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindBoost.cmake:245 (find_package)
  CMakeLists.txt:10 (find_package)
	This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at /usr/local/lib/cmake/Boost-1.74.0/BoostConfig.cmake:240 (if):
 if given arguments:
 "ALL" "IN_LIST" "Boost_FIND_COMPONENTS"
 Unknown arguments specified

A: 由于boost最新的库需要更高的cmake 支持, 添加以下设定到CMakeLists.txt中

CMAKE_MINMUM_REQUIRED(VERSION 3.5)

要点

  • 在每个boost库的文件下,都有相应的使用例程:
    $ cd boost_1_74_0/libs/date_time/example 
    $ ls
    gregorian  Jamfile  local_time  posix_time  tutorial
    
  • Boost在CMakeLists.txt文件中的相关使用例程在FindBoost.cmake文件中有举例:
    如果只调用boost的头文件的时候, 不用指定组件, 如果需要调用某个库的时候, 需要在find_package中指定组件, 该组件其实就是被调用的库文件的别名==(Boost libraries by their canonical name)==。
     164 # Example to find Boost headers only::
     165 #
     166 #   find_package(Boost 1.36.0)
     167 #   if(Boost_FOUND)
     168 #     include_directories(${Boost_INCLUDE_DIRS})
     169 #     add_executable(foo foo.cc)
     170 #   endif()
     171 #
     172 # Example to find Boost libraries and use imported targets::
     173 #
     174 #   find_package(Boost 1.56 REQUIRED COMPONENTS
     175 #                date_time filesystem iostreams)
     176 #   add_executable(foo foo.cc)
     177 #   target_link_libraries(foo Boost::date_time Boost::filesystem
     178 #                             Boost::iostreams)
     179 #
     180 # Example to find Boost headers and some *static* libraries::
     181 #
     182 #   set(Boost_USE_STATIC_LIBS        ON) # only find static libs
     183 #   set(Boost_USE_MULTITHREADED      ON)
     184 #   set(Boost_USE_STATIC_RUNTIME    OFF)
     185 #   find_package(Boost 1.36.0 COMPONENTS date_time filesystem system ...)
     186 #   if(Boost_FOUND)
     187 #     include_directories(${Boost_INCLUDE_DIRS})
     188 #     add_executable(foo foo.cc)
     189 #     target_link_libraries(foo ${Boost_LIBRARIES})
     190 #   endif()
     191 #
     192 # Boost CMake
    
相关标签: C/C++/Cmake