【问题标题】:cmake cannot find boost in a custom location or stock locationcmake 在自定义位置或库存位置找不到提升
【发布时间】:2018-09-08 18:24:59
【问题描述】:

这个问题是之前在 SO 上出现过的问题。比如这个问题: Cmake doesn't find Boost 但是那里和其他地方的答案似乎不起作用。

在安装了 stock 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()

【问题讨论】:

  • 使用 Boost_DEBUG 选项 CMake 输出搜索 Boost 的位置以及搜索的确切文件。显示该输出。
  • 该输出在文件系统中的什么位置?
  • 再次运行cmake,消息会输出到控制台。
  • 当我运行时:cmake 。 | tee output.txt -- 找不到 Boost(缺少:Boost_DIR) -- 配置完成 -- 生成完成 -- 构建文件已写入:/home/hal/projects/testcpp/src
  • 哦,我明白了 - 删除 PATHS 选项到 find_package(Boost)。该选项不符合您的要求,设置BOOST_ROOT 应该就足够了。

标签: c++ boost cmake


【解决方案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),但也从用户那里获取hints

默认情况下会尝试第二种方式;仅当FindXXX.cmake 脚本不存在时,才使用第一种方式。

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

【讨论】:

    猜你喜欢
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多