解决 “编译需要TBBConfig.cmake,但TBB 2020及older版本不生成.cmake文件”的问题

本文介绍如何为grid_map库安装特定版本的TBB(v2020.1),包括从源码编译TBB并生成所需的TBBConfig.cmake文件,以及手动安装库文件的具体步骤。

问题描述:

在源码编译grid_map库时,报错如下,意思是系统中无法找到TBBConfig.cmake,也就是系统中没有安装TBB。

理论上通过源码cmake编译安装TBB即可,但是grid_map编译需要v2020.1版本的TBB,2020及older版本的TBB安装文件不直接提供cmake编译所需要的文件(2021版本及以上直接编译安装即可),具体表现为:

  • 不提供TBBConfig.cmake的,所以需要自行生成TBBConfig.cmake
  • .so 以及 .h文件需要脚本文件生成
  • 库文件需要手动复制到/usr下

所以下记录此次安装过程。
报错:

CMake Error at grid_map/grid_map_filters/CMakeLists.txt:35 (find_package):
  By not providing "FindTBB.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "TBB", but
  CMake did not find one.

  Could not find a package configuration file provided by "TBB" (requested
  version 2020.1) with any of the following names:

    TBBConfig.cmake
    tbb-config.cmake

  Add the installation prefix of "TBB" to CMAKE_PREFIX_PATH or set "TBB_DIR"
  to a directory containing one of the above files.  If "TBB" provides a
  separate development package or SDK, be sure it has been installed.


-- Configuring incomplete, errors occurred!
See also "/home/twilight/project/robot/grid_map_ws/build/CMakeFiles/CMakeOutput.log".
See also "/home/twilight/project/robot/grid_map_ws/build/CMakeFiles/CMakeError.log".
Invoking "cmake" failed

解决:

通过源码编译安装TBB,但是grid_map编译需要v2020.1版本的TBB,2020及older版本的TBB是不提供TBBConfig.cmake的,所以需要cmake编译命令生成TBBConfig.cmake,然后复制到/usr/local/lib/cmake路径下。

Step 1:下载源码,切换到指定版本branch

git clone https://github.com/oneapi-src/oneTBB
# 查看tag,找到2020.1版本
git checkout v2020.1

Step 2:cmake 生成TBBConfig.cmake

下载到的2020.1版本的TBB文件如下:
在这里插入图片描述
生成TBBConfig.cmake:

cd oneTBB_202001
cmake -DTBB_ROOT=<folder where tbb /include and /lib is>   -DTBB_OS=Linux -P cmake/tbb_config_generator.cmake

注:<folder where tbb /include and /lib is>是TBB源码目录,例如:

cd oneTBB_202001
cmake -DTBB_ROOT=/home/twilight/twilight_lib/oneTBB-2020.1 -DTBB_OS=Linux -P cmake/tbb_config_generator.cmake

可以看到该命令后,在cmake文件夹生成了TBBConfig.cmake

twilight@pc:~/twilight_lib/oneTBB-2020.1/cmake$ ls
README.rst       tbb_config_generator.cmake  TBBGet.cmake            templates
TBBBuild.cmake   tbb_config_installer.cmake  TBBInstallConfig.cmake
TBBConfig.cmake  TBBConfigVersion.cmake      TBBMakeConfig.cmake

Step 3:安装TBB

cd oneTBB_202001
make
 
cd build
sudo chmod +x *.sh
sh generate_tbbvars.sh
sh tbbvars.sh

至此,TBB安装需要的库文件都已经生成

Step 4:手动安装库文件

# 在TBB源码目录下
cd oneTBB_202001/build
cd linux_intel64_gcc_cc5.5.0_libc2.31_kernel5.11.0_release #该目录根据系统gcc版本和kernal版本自动生成
sudo cp *.so /usr/local/lib #或者/usr/lib
sudo cp *.so.2 /usr/local/lib #或者/usr/lib
sudo /sbin/ldconfig

# 在TBB源码目录下
cd include
sudo cp -rf ./* /usr/local/include

# 在TBB源码目录下
cd cmake
sudo mkdir TBB
sudo cp TBBConfig.cmake  TBBConfigVersion.cmake /usr/local/lib/cmake/TBB/.

至此,TBB编译安装成功。

<think>好的,我现在需要解决用户的问题,关于CMakeTBB 4.4版本的配置文件。用户提到TBBConfig.cmaketbb-config.cmake文件缺失,而引用的资料显示旧版本TBB确实生成这些文件。 首先,用户可能使用的是旧版TBB(如2020或更早),因为引用[1]和[2]指出,2021之前版本会自动生成这些CMake文件。那解决方法之一就是升级到2021以后的版本,如引用[2]建议的。但用户可能需要继续使用旧版,比如4.4,所以需要考虑其他方法。 根据引用[1]中的步骤,旧版TBB可能需要手动生成配置文件。用户提供的命令中,运行了某些脚本生成TBBConfig.cmake,这可能是一个解决方案。需要指导用户手动生成这些文件,或者设置正确的路径。 另外,引用[3]提到环境变量配置的问题,可能涉及到设置TBB的路径,确保CMake能找到。可能需要手动指定TBB_DIR变量,指向包含配置文件的目录。 可能的步骤包括:检查TBB版本,确认是否需要手动生成配置文件;升级TBB到新版本;或者手动指定CMake的查找路径。需要将这些步骤详细列出,并参考提供的引用资料,确保解决方案的准确性。 还需要注意用户提到的具体版本是4.4,可能需要确认该版本对应的TBB年份,以确定是否属于需要手动处理的旧版本。例如,TBB 4.4可能对应2020之前的版本,因此需要按照引用[1]的方法处理。 总结解决方案的步骤:1)升级到新版本;2)手动生成配置文件;3)设置环境变量或CMake变量。同时,引用相关引用来支持每个方法的有效性。</think>### 解决方案:CMakeTBBConfig.cmake 文件问题 #### 问题原因 TBB 在 **2021 版本之前**(如 2020 及更早版本会自动生成 `TBBConfig.cmake` 或 `tbb-config.cmake` 文件,导致 CMake 无法通过 `find_package(TBB)` 直接识别库路径[^2]。若你使用的 TBB 版本较旧(如 TBB 4.4),则需手动生成或配置该文件。 --- #### 解决方法 ##### 方法 1:升级到 TBB 2021+ 版本(推荐) 1. **卸载旧版 TBB**(如已安装) 2. **下载新版本 TBB** 从 GitHub 下载 2021+ 版本源码(如 [oneTBB-2021.x](https://github.com/oneapi-src/oneTBB/tags))。 3. **编译安装** ```bash cd oneTBB-<version> mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local .. make -j$(nproc) sudo make install ``` 4. **验证** CMake 会自动生成 `TBBConfig.cmake`,之后项目中调用 `find_package(TBB)` 即可。 ##### 方法 2:手动生成 TBBConfig.cmake(适用于旧版本) 若必须使用旧版 TBB(如 2020 或 4.4),需通过脚本生成配置文件: 1. **进入 TBB 源码的 cmake 目录** ```bash cd oneTBB-<version>/cmake ``` 2. **执行生成脚本** 运行 `tbb_config_generator.cmake` 或相关脚本生成配置文件[^1]: ```bash cmake -P tbb_config_generator.cmake ``` 3. **手动指定 CMake 搜索路径** 将生成的 `TBBConfig.cmake` 所在目录添加到 `TBB_DIR` 环境变量或 CMake 参数: ```cmake set(TBB_DIR "/path/to/tbb/cmake") find_package(TBB REQUIRED) ``` ##### 方法 3:直接配置路径与库文件 若上述方法无效,可手动指定头文件和库路径: ```cmake # CMakeLists.txt 示例 set(TBB_INCLUDE_DIRS "/usr/local/include/tbb") set(TBB_LIBRARIES "/usr/local/lib/libtbb.so") target_include_directories(your_project PRIVATE ${TBB_INCLUDE_DIRS}) target_link_libraries(your_project PRIVATE ${TBB_LIBRARIES}) ``` --- #### 验证配置 在 CMake 构建时添加 `--debug-find` 参数,查看 TBB 查找过程: ```bash cmake --debug-find -B build . ``` --- #### 相关问题 1. **如何在同操作系统中安装 TBB?** Windows 需将 TBB 的 `bin` 目录添加到 `PATH`;Linux 需确保库路径在 `LD_LIBRARY_PATH` 中[^3]。 2. **CMake 报错“找TBB Debug.dll”如何解决?** 检查是否安装了 TBB 的调试版本,或配置 `TBB_LIBRARY_DEBUG` 路径。 3. **如何为旧版 TBB 编写兼容的 CMake 脚本?** 可参考官方提供的兼容性补丁或自定义 `FindTBB.cmake` 模块。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值