【问题标题】:Building TBB using Visual Studio 2015 x64 and CMake使用 Visual Studio 2015 x64 和 CMake 构建 TBB
【发布时间】:2019-01-08 15:14:39
【问题描述】:

我想构建 TBB 以在另一个 CMake 项目中使用它。我尝试使用makefile(使用VisualStudio 2015 升级)从Github source 构建TBB。由于一个神秘的错误而失败:

LINK : fatal error LNK1181: cannot open input file 'opencv_core300.lib'

这个错误可能来自哪里?

我的第二次尝试是使用另一个 repository 构建 TBB,它允许使用 CMake 构建。此构建生成 tbb.lib、tbb.dll 等文件。 现在我被困在如何合并是在我的其他 cmake 文件中。没有 TBBConfig.cmake 或类似文件。 我的项目的 CMakeLists.txt 如下所示:

cmake_minimum_required(VERSION 3.10)
project(IntrafraktionelleRegistrierung)

find_package(ITK REQUIRED
 COMPONENTS 
    ITKRegistrationCommon
    ITKRegistrationMethodsv4
)

include(${ITK_USE_FILE})
set(SRC
    ${CMAKE_PROJECT_NAME}.cxx
)

if (DEFINED ENV{TBBROOT})
    message(STATUS "TBBROOT: $ENV{TBBROOT}")    
else()
    message(STATUS "TBBROOT not defined!")
endif()

find_package(TBB REQUIRED)  
add_executable(${CMAKE_PROJECT_NAME} ${SRC})
target_link_libraries( ${CMAKE_PROJECT_NAME}
    ${ITK_LIBRARIES}
    tbb
)'

TBBROOT 是 tbb 的构建目录。我有的FindTBB.cmake是从here借来的,复制到cmake的modules目录下。

binaries of TBB 的最新版本有一个 CMake 文件夹,里面有 TBBConfig.cmake。我用它来将 TBB 链接到我的项目,但不知何故,我最终得到了一条错误消息:“tbb-NOTFOUND.obj 无法找到”。 (这种方式还在研究中。

有人用这个仓库配置和构建了一个 cmake 项目吗?

【问题讨论】:

  • 如果它使用CMake 构建,它应该在构建树中生成TBBConfig.cmake
  • 此错误可能源自何处? 您在 makefile 预期的路径中没有 opencv 库,或者您正在混合32 位和 64 位。
  • 您是否将TBBROOT 环境变量设置为指向TBB 项目的构建文件夹?请注意,使用CMake 进行配置时,您通常使用不同的文件夹来构建而不是源。
  • if (DEFINED ENV{TBBROOT}) 你在 ENV 之前缺少了一个 $,它应该是:if (DEFINED $ENV{TBBROOT})
  • 我检查了两次:没有创建 TBBConfig.cmake 文件。

标签: c++ cmake tbb


【解决方案1】:

关于 CMake 相关问题

基本上你有两个选择:

  • 将预构建的 TBB 二进制文件集成到您的项目中

    您可以根据以下example 使用binaries of TBB(就像您一样)。调用find_package(TBB REQUIRED) 后,您将获得格式为TBB::<component> 的TBB 目标(例如TBB::tbbTBB::tbbmalloc 等)。此外,TBB_IMPORTED_TARGETS 变量将包含所有导入的 TBB 目标。

    所以,你需要稍微修改一下你的target_link_libraries

    target_link_libraries( ${CMAKE_PROJECT_NAME}
        ${ITK_LIBRARIES}
        ${TBB_IMPORTED_TARGETS}
    )
    

    target_link_libraries( ${CMAKE_PROJECT_NAME}
        ${ITK_LIBRARIES}
        TBB::tbb
    )
    

    如果您的项目中只需要 TBB::tbb 组件,您也可以更新您的 find_packagefind_package(TBB REQUIRED tbb)

  • 将 TBB 源代码集成到您的项目中

    您可以使用tbb_build(它是在 TBB Makefiles 上使用 GNU Make 的 CMake 包装器),但要在 Visual Studio 下的 Windows 上运行它,您需要在您的环境中安装 GNU Make。

    如果您想集成此TBB (with CMake support),您可以使用add_subdirectory(<YOUR-TBB-ROOT>)(将<YOUR-TBB-ROOT> 替换为TBB 的实际位置)而不是find_package(TBB REQUIRED)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多