You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入第三方库头文件:#include "filename"与#include <filename>如何选择?

C++第三方库头文件的#include选择:""还是<>?

先明确两种引入方式的核心区别:

  • <filename>:编译器优先搜索系统预设的库路径(比如/usr/include、编译器自带目录,或是编译选项-I指定的全局路径),属于全局库的标准引入方式。
  • "filename":编译器先搜索当前源文件所在目录及项目本地路径,找不到再 fallback 到系统路径,更适合项目专属的本地文件或依赖。

1. Boost这类系统级安装的第三方库

Boost通常通过包管理器或手动安装到系统标准路径(比如/usr/local/include),属于全局可用的公共库,这种情况要用<>引入,示例:

#include <boost/algorithm/string.hpp>

这么做的原因:

  • 符合C++社区惯例,明确标识这是一个全局第三方库,而非项目自有代码;
  • 编译器无需遍历项目本地目录,查找效率更高。

2. CMake FetchContent拉取的本地第三方库

FetchContent会把库代码下载到当前项目的本地目录(比如默认的_deps文件夹),但这类库本质还是独立的第三方组件,正确的引入方式要结合两点:

  • 优先遵循该库官方文档的推荐:比如fmt、Abseil这类库,官方要求用<>引入,哪怕是本地拉取的也照做——因为CMake会自动把库的include目录添加到编译的包含路径中(等价于给编译器加了-I参数),编译器能正常找到;
  • 语义上的合理性:这类库并非你编写的项目代码,用<>更能体现其独立第三方库的属性;
  • 例外情况:如果拉取的是无规范结构的小型本地库,头文件直接和你的源码同目录,这时用""更合适。

总结

  • 系统级全局安装的第三方库(如Boost):用<>;
  • FetchContent拉取的第三方库:优先遵循库自身的引入惯例(通常是<>),仅小型本地自定义库用""。

内容的提问来源于stack exchange,提问作者lei hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 21:30:11