引入第三方库头文件:#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
相关产品推荐
相关产品推荐

