set_target_properties
要求属性的值恰好是 1 个参数,因此TBB_INCLUDE_DIRS
orTBB_LIBRARIES
不包含恰好一个元素(可能使用复数)确实会破坏事情。需要引用这些值,以确保无论这些(列表?)变量中的元素数量如何,代码段都能正常工作。
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}")
另一种方法是使用该set_property
命令,它允许您指定多个值。
set_property(TARGET TBB::tbb PROPERTY INTERFACE_COMPILE_DEFINITIONS ${TBB_DEFINITIONS})
set_property(TARGET TBB::tbb PROPERTY INTERFACE_LINK_LIBRARIES Threads::Threads ${CMAKE_DL_LIBS})
set_property(TARGET TBB::tbb PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${TBB_INCLUDE_DIRS})
set_property(TARGET TBB::tbb PROPERTY IMPORTED_LOCATION ${TBB_LIBRARIES})
不幸的是,由于这似乎是一个第三方库,除了修改您的安装并将此问题报告给供应商并希望在未来的更新中得到修复之外,您可能无能为力。
顺便说一句:这个片段中还有一些奇怪的地方:使用复数 inTBB_LIBRARIES
可能表明可以指定多个值,但该IMPORTED_LOCATION
属性应该设置为二进制文件的单个路径,请参阅目标属性的文档。
也许有一个 hack 来处理这个问题,它可以让你构建你的项目,而不管提到的问题是什么:确保首先导入TBB::tbb
并且作为包的唯一组件;如果库不自动将其他库添加到TBB_LIBRARIES
变量,这可能会导致变量包含单个值。不过,我不会在未来的版本中依赖这种情况......