0

我正在尝试建立对 superslicer 的 prusaslicer 依赖项(与问题无关),但我在FindTBB.cmake文件中出现错误,它说

使用错误数量的参数调用 set_target_properties。

以下代码来自哪里抱怨格式:

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})

我能做些什么来解决这个问题?

4

1 回答 1

0

set_target_properties要求属性的值恰好是 1 个参数,因此TBB_INCLUDE_DIRSorTBB_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变量,这可能会导致变量包含单个值。不过,我不会在未来的版本中依赖这种情况......

于 2021-09-08T18:45:02.460 回答