视频加载失败

CMake target_include_directories 的三种作用域

355 字
2 分钟
CMake target_include_directories 的三种作用域

target_include_directories()#

命令可以为目标指定包含目录,并且可以使用 PRIVATE、INTERFACE 或 PUBLIC 来控制这些包含目录的作用范围以及它们是否会传播给其他依赖该目标的目标。

1. PRIVATE#

PRIVATE 意味着包含目录仅对该目标自身可见,它不会传播给链接该目标的其他目标。

target_include_directories(MyTarget PRIVATE include/)
  • 使用场景:目标在自身编译时需要该包含目录,但不希望其他链接到这个目标的目标使用该目录。

2. INTERFACE#

INTERFACE 表示该目标本身不需要这个包含目录,但是链接到这个目标的其他目标会需要它。

target_include_directories(MyTarget INTERFACE include/)
  • 使用场景:该目标是一个头文件库(例如header-only library),它自身不需要包含目录,但任何链接到它的目标都需要这个包含目录来编译。

3. PUBLIC#

PUBLIC 意味着包含目录对该目标自身和链接到该目标的其他目标都可见。它既会用于编译这个目标,也会传播给任何依赖它的其他目标。

target_include_directories(MyTarget PUBLIC include/)
  • 使用场景:该目标在编译时需要包含目录,同时任何依赖这个目标的其他目标也需要该包含目录。

总结:#

可见性目标本身使用链接到该目标的其他目标使用
PRIVATE是否
INTERFACE否是
PUBLIC是是

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CMake target_include_directories 的三种作用域
https://blog.81vm3.xyz/posts/cmake-target-include-directories/
作者
Blume
发布于
2025-07-08
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
Blume
I build interesting things.
公告
欢迎来到我的博客!
分类
标签
最新动态
站点统计
文章
38
分类
5
标签
98
总字数
23,078
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录