CMake报错set_target_properties调用参数数量错误(FindTBB.cmake)如何解决?
报错原因
你遇到的set_target_properties called with incorrect number of arguments报错,本质是CMake解析属性配置时出现了键值配对不匹配的问题:原代码中${TBB_INCLUDE_DIRS}、${TBB_LIBRARIES}两个变量没有加引号包裹,如果前置查找TBB的逻辑没有找到对应依赖,这两个变量会变为空值,解析时相当于直接缺失了两个属性值,最终导致整体参数数量不符合要求。
修复方案
- 第一步:给所有引用变量加双引号包裹,避免空值导致参数缺失,替换原代码为以下内容:
set_target_properties(TBB::tbb PROPERTIES INTERFACE_COMPILE_DEFINITIONS "${TBB_DEFINITIONS}" INTERFACE_LINK_LIBRARIES "Threads::Threads;${CMAKE_DL_LIBS}" INTERFACE_INCLUDE_DIRECTORIES "${TBB_INCLUDE_DIRS}" IMPORTED_LOCATION "${TBB_LIBRARIES}")
- 第二步:在这段配置前新增TBB变量非空校验,提前识别依赖缺失问题,避免后续逻辑报错:
# 新增TBB依赖校验 if(NOT TBB_FOUND OR NOT TBB_INCLUDE_DIRS OR NOT TBB_LIBRARIES) message(FATAL_ERROR "TBB dependency not found, please check if TBB is installed and the search path is correct") endif()
- 可选优化:如果你使用的是2021及以上版本的TBB,官方已经自带了CMake配置文件,不需要自定义FindTBB.cmake脚本。可以直接删除项目中自定义的FindTBB.cmake文件,在根CMakeLists.txt的依赖查找部分直接使用官方配置:
find_package(TBB REQUIRED)
配置后TBB::tbb目标会自动生成,不需要手动调用set_target_properties配置属性,从根源避免该类错误。
内容的提问来源于stack exchange,提问作者Meganium97
相关产品推荐
相关产品推荐

