[英]Examples of when PUBLIC/PRIVATE/INTERFACE should be used in cmake
我正在读关于cmake的关键字PUBLIC
, PRIVATE
, INTERFACE
和整个本段来到这里在cmake的文档。
通常,如果依赖项仅用于库的实现而不是在头文件中,则应在使用 target_link_libraries() 和 PRIVATE 关键字时指定依赖项。 如果在库的头文件中额外使用了依赖项(例如用于类继承),则应将其指定为 PUBLIC 依赖项。 库的实现不使用而仅由其头文件使用的依赖项应指定为 INTERFACE 依赖项。
我了解您在这三个关键字之间的选择如何影响target_link_libraries
和target_include_directories
的行为,但我不明白本段中解释的三种情况之间的区别。 有人可以提供一个玩具的例子吗
PRIVATE
)PUBLIC
)中使用依赖项INTERFACE
)让我们首先处理PUBLIC
和PRIVATE
:
假设您正在编写一个带有 Qt GUI 的工具。 你这个 GUI 应该允许你使用插件动态地向 GUI 添加元素。 此外,用户应该能够通过设置激活和停用插件,并且需要在未来启动程序时激活相同的插件。
因此,您的库提供了 2 个功能:
PUBLIC
lyPRIVATE
ly。 INTERFACE
可见性
您很少会使用此可见性。 通常你需要访问标题等。 在你自己的图书馆里。
值得注意的例外是只有头文件的库。 这些实际上不会导致在您的构建系统中创建目标,并且它们不能单独构建。 CMake 目标本身只是一种通过target_link_libraries
提供头文件和依赖库的便捷方式。
另一个例外是导入的目标。 这些也不会编译为您项目的一部分。 它们只包含有关已经构建的库的信息。 对于导入的目标,您只能使用INTERFACE
可见性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.