You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake中如何让OpenVDB找到已源码构建的Boost依赖?

问题解决:让OpenVDB识别FetchContent获取的Boost

问题根源

  1. FetchContent默认获取的Boost未启用CMake构建模式,仅提供头文件,不会编译iostreams这类需要编译的组件,导致OpenVDB的find_package(Boost)找不到对应库文件。
  2. OpenVDB的CMake配置会独立调用find_package(Boost),默认优先搜索系统路径,不会自动识别通过FetchContent获取的本地Boost版本。

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(MyOpenVDBProject CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

include(FetchContent)

# 获取并构建Boost,启用CMake模式并编译iostreams组件
FetchContent_Declare(
  Boost
  URL https://archives.boost.io/release/1.88.0/source/boost_1_88_0.tar.gz
  URL_HASH SHA256=3621533e820dcab1e8012afd583c0c73cf0f77694952b81352bf38c1488f9cb4
  CMAKE_ARGS
    -DBOOST_ENABLE_CMAKE=ON
    -DBOOST_COMPONENTS=iostreams
    -DBUILD_SHARED_LIBS=ON # 需静态库可改为OFF
)
FetchContent_MakeAvailable(Boost)

# 将Boost构建目录加入搜索路径,引导后续find_package优先查找
set(CMAKE_PREFIX_PATH "${Boost_BINARY_DIR};${CMAKE_PREFIX_PATH}")

FetchContent_Declare(
  oneTBB
  URL https://github.com/oneapi-src/oneTBB/archive/refs/tags/v2021.11.0.tar.gz
  URL_HASH SHA256=782ce0cab62df9ea125cdea253a50534862b563f1d85d4cda7ad4e77550ac363
)
FetchContent_MakeAvailable(oneTBB)

FetchContent_Declare(
  blosc
  URL https://github.com/Blosc/c-blosc/archive/refs/tags/v1.21.5.tar.gz
  URL_HASH SHA256=32e61961bbf81ffea6ff30e9d70fca36c86178afd3e3cfa13376adec8c687509
)
FetchContent_MakeAvailable(blosc)
set(CMAKE_PREFIX_PATH "${blosc_BINARY_DIR};${CMAKE_PREFIX_PATH}")

# 获取OpenVDB,强制使用预获取的依赖版本
FetchContent_Declare(
  OpenVDB
  URL https://github.com/AcademySoftwareFoundation/openvdb/archive/refs/tags/v11.0.0.tar.gz
  URL_HASH SHA256=6314ff1db057ea90050763e7b7d7ed86d8224fcd42a82cdbb9c515e001b96c74
  CMAKE_ARGS
    -DBoost_ROOT=${Boost_SOURCE_DIR}
    -DTBB_ROOT=${oneTBB_SOURCE_DIR}
    -DBLOSC_ROOT=${blosc_SOURCE_DIR}
    -DOPENVDB_BUILD_EXAMPLES=OFF # 关闭无用构建项加速编译
    -DOPENVDB_BUILD_TESTS=OFF
)
FetchContent_MakeAvailable(OpenVDB)

# 若需编译自定义代码,取消以下注释并添加源文件
# add_executable(my_app main.cpp)
# target_link_libraries(my_app PRIVATE OpenVDB::openvdb)

关键修改说明

  • Boost构建配置:添加CMAKE_ARGS启用BOOST_ENABLE_CMAKE,让Boost使用CMake编译iostreams组件,解决仅头文件无编译库的问题。
  • 搜索路径设置:将Boost、blosc的构建目录加入CMAKE_PREFIX_PATH,让OpenVDB的find_package优先搜索本地预获取的依赖。
  • OpenVDB依赖指定:通过CMAKE_ARGS直接传递预获取依赖的根目录,强制OpenVDB使用我们指定的版本,避免重复拉取依赖。

内容的提问来源于stack exchange,提问作者cosama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:25:56