【问题标题】:Is there a LINK_DIRECTORIES or equivalent property in CMake?CMake 中是否有 LINK_DIRECTORIES 或等效属性?
【发布时间】:2014-09-29 14:30:17
【问题描述】:

我创建了一个包含大量 link_directories() 命令的项目。我现在想将生成的目录字符串存储到一个变量中。对于 include_directories() 这很容易使用

get_property( test_INCLUDE_DIRECTORIES TARGET test PROPERTY INCLUDE_DIRECTORIES )

但是似乎没有 LINK_DIRECTORIES 属性可做

get_property( test_LINK_DIRECTORIES TARGET test PROPERTY LINK_DIRECTORIES )

有没有办法获取用于目标的链接目录列表?

(注意:我意识到我可以自己手动跟踪变量中的链接目录,然后使用单个 link_directories() 但它看起来不是很干净)

【问题讨论】:

  • 为什么需要列表作为变量?
  • 我想将这些链接目录“向上”发送到父项目,以便父项目将正确链接到子项目中指定的库。我最终会使用绝对库路径,因此完全避免使用 link_directories() 但现在......

标签: cmake


【解决方案1】:

看看LINK_DIRECTORIES directory property

关键是link_directories 在每个目录的基础上运行(该命令会影响在相同 CMakeLists 中定义的所有目标,以及来自其所有子目录的目标),例如,与 target_include_directories 不同,它可以工作以每个目标为基础。

您可以通过以下方式查询属性的值:

get_property(test_LINK_DIRECTORIES DIRECTORY PROPERTY LINK_DIRECTORIES)

如果从与link_directories 调用相同的目录调用。否则,您需要在DIRECTORY 之后提供(完整或相对)路径作为附加参数。不幸的是,我不知道如何获取现有目标的匹配目录。

请注意,通常 CMake 中的 use of link_directories is discouraged,这可能是它没有得到很好支持的主要原因。除非您有充分的理由不这样做,否则您应该始终坚持使用传递给 target_link_libraries 的完整库路径。从长远来看,它将为您省去很多麻烦。

【讨论】:

  • 谢谢!在链接的文档中,该属性被标记为用于调试。这是否意味着它可能会消失?
  • @user2746401 我不知道有任何这样的计划。该评论可能是指您只能通过link_directories 设置此属性,而不能使用set_property
  • 我现在正在尝试使用完整的库路径,但对这些路径感到头疼。见stackoverflow.com/questions/25423905/…
猜你喜欢
  • 1970-01-01
  • 2017-02-16
  • 2017-03-12
  • 1970-01-01
  • 2021-12-04
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
相关资源
最近更新 更多