如何在cmake中包含本地Boost

问题描述 投票:0回答:1

出于分发目的,我仅从 boost 中提取了 asio lib。 这样用户就可以直接克隆我的git分支,并构建它。

但是虽然我将boost路径设置为我的本地路径(在项目下),但日志仍然显示我使用的boost安装在系统路径中。

日志:系统中安装了boost

-- 找到Boost:/usr/local/lib/cmake/Boost-1.80.0/BoostConfig.cmake(找到版本“1.80.0”)找到组件:系统 Boost 位于:/usr/local/include

请教我如何修改我的cmake,谢谢!

cmake_minimum_required(VERSION 3.24.2)
project(GHCtest LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_BUILD_TYPE Debug)
set(BOOST_ROOT ${CMAKE_SOURCE_DIR}/boost/include)
set(CMAKE_PREFIX_PATH ${BOOST_ROOT})

find_package(Boost REQUIRED COMPONENTS system)

if(NOT Boost_FOUND)
    message(FATAL_ERROR "Boost not found. Please set BOOST_ROOT to the Boost installation path.")
else()
    message("Boost found at: ${Boost_INCLUDE_DIRS}")
endif()

include_directories(${CMAKE_SOURCE_DIR}/src/ ${BOOST_ROOT})
add_subdirectory(src)


set(SOURCE_FILES main.cpp)
add_executable(GHCtest ${SOURCE_FILES})

target_link_libraries(GHCtest PRIVATE srclib pthread)
c++ cmake boost
1个回答
0
投票

这里有几点需要注意

1.

find_package(Boost REQUIRED COMPONENTS system)

find_package
将始终查找系统级目录,除非您全局配置它(我建议不要这样做)

2.

    message("Boost found at: ${Boost_INCLUDE_DIRS}")

${Boost_INCLUDE_DIRS}
是一个由
find-package
初始化的变量。所以是的,
${Boost_INCLUDE_DIRS}
将返回系统级目录。

3.

set(BOOST_ROOT ${CMAKE_SOURCE_DIR}/boost/include)
set(CMAKE_PREFIX_PATH ${BOOST_ROOT})
...
...
...
include_directories(${CMAKE_SOURCE_DIR}/src/ ${BOOST_ROOT})

这表明您正确地包含了 Boost 的本地副本。

因此,我假设您的日志消息是由

find_package
生成的,正如我之前提到的,它将始终指向系统级目录。

尝试从

find_package
文件中删除
CMakeLists.txt
命令,看看你的代码是否仍然可以编译。我希望它能够编译,因为在我看来,您实际上并没有使用系统级Boost。

© www.soinside.com 2019 - 2024. All rights reserved.