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/相关文章智能推荐
1
CMake:add_subdirectory 与 add_library 的区别
编程语言add_subdirectory、add_library 与 target_link_libraries 各自的职责边界。
2
C++ priority_queue 优先队列
编程语言C++ priority_queue 的基本用法与通过自定义比较实现最小堆。
3
Python StrEnum 与 Literal 的区别
编程语言StrEnum(运行时枚举)与 Literal(纯类型约束)的差异、对比表与 FastAPI/Pydantic 选型建议。
4
Grafana 可视化与监控
云原生与运维Grafana 的定位、常见数据源与 Grafana + Prometheus 经典监控链路。
5
Gin 模型绑定与验证
编程语言Gin 的两类绑定方法(Must/Should)与 binding:'required' 字段校验用法。
随机文章随机推荐











