这个问题是在SO上已经发生的一个问题。例如这个问题: Cmake doesn't find Boost 但是那里和其他地方的答案似乎无效。
在安装了股票Boost 1.58.0的Ubuntu 16.04上,我还在自定义位置构建了boost 1.68.0。
现在我正在尝试使用boost和cmake编译一个简单的c ++程序。它找不到动力。两种版本都可以(尽管1.68.0是我真正想要使用的版本)。 它给: -无法找到Boost(缺少:Boost_DIR)
下面是CMakeLists.txt文件。正在使用CMake 3.12.1。
cmake_minimum_required(VERSION 3.0.0)
set(CMAKE_CXX_STANDARD 17)
project(mytest CXX)
set(Boost_DEBUG ON)
set(Boost_DETAILED_FAILURE_MSG ON)
set(BOOST_ROOT /home/hal/projects/boost/boost)
# set(Boost_DIR /home/hal/projects/boost/boost)
#set(Boost_USE_DEBUG_LIBS ON)
#set(Boost_USE_STATIC_LIBS ON)
#set(Boost_USE_MULTITHREADED ON)
# set(Boost_USE_STATIC_RUNTIME OFF)
#set(Boost_INCLUDE_DIR /home/hal/projects/boost/boost )
set(Boost_ADDITIONAL_VERSIONS "1.58" "1.58.0")
#set(BOOST_INCLUDEDIR /home/hal/projects/boost/boost/include )
#set(BOOST_LIBRARYDIR /home/hal/projects/boost/boost/lib )
#SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "/home/hal/projects/boost/boost")
#SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "/home/hal/projects/boost/boost/lib")
find_package(Boost 1.68.0 COMPONENTS system date_time PATHS /home/hal/projects/boost/boost )
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(mytest main.cpp)
target_link_libraries(mytest ${Boost_LIBRARIES} stdc++)
endif()
答案 0 :(得分:1)
除非您使用实施来搜索包装,否则find_package
的选项 PATHS 并不是那么有用,只需删除即可:
find_package(Boost 1.68.0 COMPONENTS system date_time)
在CMake中有两种搜索软件包的方法:
XXXConfig.cmake
脚本,随特定的软件包安装一起提供。在此脚本中,所有路径(库,包含目录等)均被硬编码。FindXXX.cmake
脚本,该脚本随CMake一起提供。该脚本搜索系统目录下的库和标头(例如/usr/local/lib
),但还会从用户那里获取提示。默认情况下,尝试第二种方法;仅当缺少FindXXX.cmake
脚本时,才使用第一种方法。
但是find_package
的某些选项仅适用于第一种方式,而 PATHS 正是这种选择:它指定可以找到XXXConfig.cmake
文件的路径。有了这样的选项,find_package
使用第二种方法-它尝试查找并执行XXXConfig.cmake
脚本。但是看来您的Boost安装缺少此配置脚本,因此CMake无法找到Boost。