【问题标题】:What is default target_link_libraries privacy setting?什么是默认 target_link_libraries 隐私设置?
【发布时间】:2018-12-26 01:18:29
【问题描述】:

我想知道默认的target_link_libraries 隐私是什么。

我在 CMake 中添加了一行:

target_link_libraries(myTarget
        libraryA
        libraryB
        )

但我不知道是PRIVATE 还是PUBLIC 或者INTERFACE。 我检查了documentation,但我没有看到我的问题的答案:(

编辑:

我找到sth:

最后一点,如果您调用 target_link_libraries() 并且不 指定 PRIVATE、PUBLIC 或 INTERFACE 中的任何一个,您可能会想 相信它将被视为 PUBLIC。情况其实是 比这更复杂。它可能被视为 PUBLIC 或 PRIVATE,取决于其他 target_link_library() 调用和/或 已执行目标属性操作。文档 for target_link_libraries() 对此进行了一些讨论,但你必须去 深入研究它提到的目标属性的文档 了解哪些情况会导致 PRIVATE 或 公共行为。

什么情况? (顺便说一句。这句话的作者是 Craig Scott,他似乎是 SO 的活跃用户,我相信他可以回答我......)

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    policy 0023 的描述表明,target_link_libraries 没有“默认”行为 - 每个项目都应该使用全关键字或无关键字调用此命令: p>

    不能混合使用普通和关键字 target_link_libraries 签名。

    【讨论】:

    • "当然是执行..." - 默认链接在PUBLICPRIVATEINTERFACE 区域中没有直接等效项。您是否只使用target_link_libraries 调用,它们调用将具有即时和传递效果,例如PUBLIC。但是对于其他一些命令和访问属性,传递效果可能会丢失,因此行为类似于PRIVATE
    • CMake 不会破坏旧的(遗留)代码。那么您是否只使用旧 CMake 中存在的函数(例如,最高版本 ~2.8),您可能希望这些函数即使在较新的 CMake 解释器中也能工作。但是,如果您将旧功能与新(“现代”)功能混合使用,可能会发生奇怪的事情。
    • 但是为什么没有直接的等价物呢?你的意思是我们不能通过编写像target_link_libraries(mylib <PRIVATE|PUBLIC|INTERFACE> A) 这样的关键字版本来实现相同的行为target_link_libraries(mylib A)
    • @IgNite:是的,使用关键字你无法完全实现与没有关键字相同的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 2022-07-01
    • 2022-10-15
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多