【问题标题】:target_link_libraries: Sane default for PRIVATE|PUBLIC|INTERFACE [duplicate]target_link_libraries:PRIVATE|PUBLIC|INTERFACE 的默认设置 [重复]
【发布时间】:2025-12-15 00:40:01
【问题描述】:

在将target_link_libraries 与不太旧版本的 CMake 一起使用时,我们鼓励我使用关键字PRIVATEPUBLICINTERFACE 之一。假设我只想完成链接,不想了解我的选择的含义。我只想让我的可执行文件链接到库。

  • 什么是明智的默认选择?
  • 我怎么知道,我应该开始理解关键词的含义?换句话说,如果我选择了错误的错误(理智的默认或明显的错误),会发生什么样的错误?

【问题讨论】:

  • @StephenNewell 这个问题有很好的答案。感谢您在此处链接。但它解释了关键词的含义。我想有一个默认值而无需进一步考虑。
  • “我只想让我的可执行文件链接到库。” - 由于一个可执行文件不能被链接进入另一个可执行文件或库,那么对于一个可执行文件INTERFACE链接没有意义,PUBLICPRIVATE链接给出效果一样。
  • “我不想理解我的选择的含义” - 如此懒惰的理由。目前,我将question 视为您的正确副本。即使您希望您的问题特定于可执行链接,对重复问题的附加答案看起来也比(您的)附加问题更好。
  • “什么是明智的默认选择?” 不难弄清楚。对于可执行文件,不要使用INTERFACE;对于库,根据经验,只需检查您的库的公共标头:是否提到了链接库的标头?然后使用PUBLIC,除非标头不参与lib本身的编译;在这种情况下,请改用INTERFACE。否则使用PRIVATE。错误的选择可能会导致符号/标题或符号或标题不可用的意外冲突,除非您将 lib 的依赖项链接到“手动”链接您的 lib。

标签: cmake


【解决方案1】:

什么是明智的默认选择?

公开

你也可以只做target_link_libraries(the_target the_lib)

我怎么知道,我应该开始理解关键词的意思?换句话说,如果我选择了错误的错误(理智的默认或明显的错误),会发生什么样的错误?

缺少包含标头错误。未定义的引用或未解决的外部符号错误。

【讨论】: