cmake无法在自定义位置或库存位置找到提升

时间:2018-09-08 18:24:59

标签: c++ boost cmake

这个问题是在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()

1 个答案:

答案 0 :(得分:1)

除非您使用实施来搜索包装,否则find_package的选项 PATHS 并不是那么有用,只需删除即可:

find_package(Boost 1.68.0 COMPONENTS system date_time)

说明

在CMake中有两种搜索软件包的方法:

  1. 使用XXXConfig.cmake脚本,随特定的软件包安装一起提供。在此脚本中,所有路径(库,包含目录等)均被硬编码
  2. 使用FindXXX.cmake脚本,该脚本随CMake一起提供。该脚本搜索系统目录下的库和标头(例如/usr/local/lib),但还会从用户那里获取提示

默认情况下,尝试第二种方法;仅当缺少FindXXX.cmake脚本时,才使用第一种方法。

但是find_package的某些选项仅适用于第一种方式,而 PATHS 正是这种选择:它指定可以找到XXXConfig.cmake文件的路径。有了这样的选项,find_package使用第二种方法-它尝试查找并执行XXXConfig.cmake脚本。但是看来您的Boost安装缺少此配置脚本,因此CMake无法找到Boost。