微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

编译 tbb 项目时出现 cmake 命令问题

如何解决编译 tbb 项目时出现 cmake 命令问题

我尝试使用演示在我的项目中编译 tbb。 演示链接 https://www.selectiveintellect.net/blog/2016/7/29/using-cmake-to-add-third-party-libraries-to-your-project-1

IDE 对我来说是 VS2013 并且收到关于命令 'make' 的错误

Performing build step for 'tbb44'
2>  CMake Error at F:/CPPs/FAsT-Match-master/build/tbb44/src/tbb44-stamp/tbb44-build-Debug.cmake:49 (message):
2>    Command Failed: 2
2>  
2>     'make' 'tbb_build_prefix=tbb44'

原始命令是通过tbb.cmake生成的,它看起来像

ExternalProject_Add(${TBB_PREFIX}
    PREFIX ${TBB_PREFIX}
    URL ${TBB_URL}
    URL_MD5 ${TBB_URL_MD5}
    CONfigURE_COMMAND ""
#   BUILD_COMMAND ${TBB_MAKE} -j${Ncpu} tbb_build_prefix=${TBB_PREFIX}
    BUILD_COMMAND ${TBB_MAKE} tbb_build_prefix=${TBB_PREFIX}

评论的是原文,后面的是修改的。 这是MSVC的问题吗?

解决方法

那篇博文完全错误。 TBB 现在带有自己的 CMake 构建,所以绝对没有理由像这样通过 ExternalProject。

这是我使用 Visual Studio 2019 从源代码构建它的方法(说明应该几乎相同)。从开发人员命令提示符,使用 CMake 3.20:

D:\>git clone https://github.com/oneapi-src/oneTBB
D:\>cmake -S oneTBB -B oneTBB-build -DTBB_TEST=OFF
D:\>cmake --build oneTBB-build --config Release
D:\>cmake --build oneTBB-build --config Debug
D:\>cmake --install oneTBB-build --prefix oneTBB-install --config Release
D:\>cmake --install oneTBB-build --prefix oneTBB-install --config Debug

TBB_TEST 设置为 OFF 可以节省大量等待 TBB 测试构建的时间。这些命令将调试和发布二进制文件安装到 D:\oneTBB-install。当然,你可以把这个文件夹放在任何你喜欢的地方。

完成此操作后,您可以像这样使用项目中的新 TBB 构建:

cmake_minimum_required(VERSION 3.20)
project(TBB-test)

find_package(TBB REQUIRED)

add_executable(main main.cpp)
target_link_libraries(main PRIVATE TBB::tbb)

TBB 包还包括库 TBB::tbbmallocTBB::tbbmalloc_proxy

当您构建项目时,您可以通过在命令行中通过以下方式将 CMake 变量 find_package 设置为 TBB_ROOT 来将 D:/oneTBB-install 指向您的 TBB 安装:

D:\>cmake -S myProject -B myProject-build -DTBB_ROOT=D:/oneTBB-install

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?