使用 Visual Studio 2015 x64 和 CMake 构建 TBB

Building TBB using Visual Studio 2015 x64 and CMake

我想构建 TBB 以在另一个 CMake 项目中使用它。我尝试从 Github source using the makefile(使用 VisualStudio 2015 升级)构建 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。我用它来 link TBB 到我的项目,但不知何故我以错误告终:"tbb-NOTFOUND.obj cannot be found"。 (这种方式还在研究中

是否有人使用此存储库配置和构建 cmake 项目?

关于CMake相关问题

基本上你有两个选择:

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

    可以使用binaries of TBB (just as you did) according to the following example。调用 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 Makefile 上使用 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)