首页 > 解决方案 > 使用带有“target_link_libraries”命令的生成器表达式中的列表(不需要的 -l 标志)

问题描述

我正在尝试使用生成器表达式为我的下游构建链接导入的库。(使用 cmake 3.11.1 顺便说一句)

由于 TARGET_LINK_LIBRARIES 中的生成器命令不接受空格,我发现我需要使用“JOIN”命令。然而,这似乎是在我生成的 ninja 文件中添加了一个不需要的 -l 标志,并破坏了构建。

# link dependencies
TARGET_LINK_LIBRARIES(TGT1 
  "$<JOIN:$<$<BOOL:${DOWNSTREAM_PIPELINE}>:${IMPORTED_LIBS_FOR_TGT1}>, >")
TARGET_LINK_LIBRARIES(TGT2 
  "$<JOIN:$<$<BOOL:${DOWNSTREAM_PIPELINE}>:${IMPORTED_LIBS_FOR_TGT2}>, >" $<TARGET_FILE:TGT1>)

我的 Ninja 文件中的结果是:

LINK_LIBRARIES = -llibModuleA libModuleB libModuleC ...

这里发生了什么?

感谢@StephenNewell 的提示。由于列表没有空格,我可以使用 BOOL 生成器表达式。我只是遇到了引号放错地方的问题。以下作品:

# link dependencies
TARGET_LINK_LIBRARIES(TGT1 
  "$<$<BOOL:${DOWNSTREAM_PIPELINE}>:${IMPORTED_LIBS_FOR_TGT1}>")
TARGET_LINK_LIBRARIES(TGT2 
  "$<$<BOOL:${DOWNSTREAM_PIPELINE}>:${IMPORTED_LIBS_FOR_TGT2}>" $<TARGET_FILE:TGT1>)

标签: cmakeninja

解决方案


推荐阅读