在C++中包含目录时指定完整路径

imk*_*dal 0 c++ compiler-construction linker boost mingw

在C++中,我正在搞乱升级库,我有"boost \"目录,其中包含所有boost .hpp文件和目录,以及我的编译器在"MinGW\include\boost \"的include文件夹中.现在令我困惑的是,当我想使用文件"lambda.hpp"时,我必须实际键入:

 #include <boost/lambda/lambda.hpp>
Run Code Online (Sandbox Code Playgroud)

但如果我要包含整个目录,例如"boost\algorithm \",我只需输入:

#include <algorithm>
Run Code Online (Sandbox Code Playgroud)

即使"algorithm"文件夹不在"MinGW\include"目录中,它也在"MinGW\include\boost \"中.为什么在包含整个目录而不是单个头文件时,我不需要提供完整的路径?

Som*_*ude 5

头文件<algorithm>是标准库的一部分,而不是Boost的一部分.

路径相对于预处理器搜索头文件的路径列表.因此,在的情况下<algorithm>有一个文件algorithm在这些路径中的一个的根,而在的情况下,<boost/lambda/lambda.hpp>存在有一个子文件夹另一搜索路径boost,其具有的子文件夹lambda,其具有一个文件lambda.hpp.

顺便说一句,所有Boost头文件都有后缀(即扩展名),.hpp而标准库头文件根本没有.

至于考虑包含完整目录algorithm,预处理器不支持,而是必须boost/algorithm单独包含路径中的文件.