我正试图在超级许可证上构建prusaslicer依赖关系(与问题无关),但我在FindTBB.cmake
文件中遇到了一个错误,它说
set_target_properties。
以下代码来自if抱怨格式的位置:
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_target_properties
要求属性的值恰好是1个参数,因此TBB_INCLUDE_DIRS
或TBB_LIBRARIES
不包含恰好一个元素(如果使用复数,则很可能)确实会破坏事物。需要对这些值进行引用,以确保无论这些(list?)变量中的元素数量如何,代码片段都能正常工作。
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})
不幸的是,由于这似乎是一个第三方库,除了修改安装并向供应商报告此问题并希望在未来的更新中得到修复外,您可能几乎没有什么可做的。
Btw:这个片段中还有一些额外的奇怪之处:在TBB_LIBRARIES
中使用复数可能表明可以指定多个值,但IMPORTED_LOCATION
属性应该设置为二进制文件的单一路径,请参阅目标属性的文档。
也许有一个破解方法可以处理这个问题,让你可以构建你的项目,而不管提到的问题是什么:确保首先导入TBB::tbb
,并将其作为包的唯一组件;如果库没有自动向TBB_LIBRARIES
变量添加其他库,则可能导致变量包含单个值。不过,我不会相信在未来的版本中会出现这种情况。。。