【发布时间】:2021-12-15 08:59:03
【问题描述】:
我正在阅读有关 cmake 关键字 PUBLIC、PRIVATE、INTERFACE 的内容,并在 cmake 文档中看到了这段 here。
通常,如果依赖项仅用于库的实现,而不是在头文件中,则应在使用 target_link_libraries() 和 PRIVATE 关键字时指定依赖项。如果在库的头文件中额外使用了依赖项(例如,用于类继承),则应将其指定为 PUBLIC 依赖项。一个不被库的实现使用,而只被它的头文件使用的依赖应该被指定为一个 INTERFACE 依赖。
我了解您在这三个关键字之间的选择如何影响target_link_libraries 和target_include_directories 的行为,但我不明白本段中解释的三种情况之间的区别。有人可以提供一个玩具示例
- 在库的实现中使用依赖项,但不在头文件中使用依赖项 (
PRIVATE) - 在库的实现和头文件中使用依赖项 (
PUBLIC) - 在库的头文件中使用依赖项,但不在实现中使用 (
INTERFACE)
【问题讨论】:
-
有人可以提供一个玩具示例如果它不起作用,为什么不公开你自己的玩具示例?