以下结论还需要进一步验证,所以会不断修正.
1. #include <> 不找当前目录和附加目录.只找默认属性表里配的路径(标准包含目录)
2. #include "" 都找
3. 查找顺序:当前目录(工程文件的目录),(此CPP文件的目录), 附加包含目录, 标准包含目录,
4. 特别的, 两种include都支持相对路径.
举例:
目录结构
test\ =>项目根目录
test\stdafx.h
test\stdafx.cpp
test\foo\
test\foo\a.cpp =>包含stdafx.h
stdafx.h
=========================
stdafx.h 文件的包含问题. 此项目不使用预编译头, 所以包含关系是很明确的包含关系
其中 a.cpp 包含stdafx.h, 但在 foo目录下没有stdafx.h文件. 咋办? 编译会失败, 提示找不到stdafx.h
怎么解决呢?
1. 如果不使用预编译,使用相对路径: a.cpp 里使用 #include "..\stdafx.h" 或者绝对路径.
2. 整个项目使用预编译头,stdafx.h 本身 作为预编译头文件或者包含到某个预编译头文件里.
3. 在foo目录放一个stdafx.h
4. 附加目录包含test目录.或者相对的或者绝对目录.
如果a.cpp 是存在于其他项目里的. 你不能改/或者不想改那个项目, 你只是把它包含到你的项目里来.
那么 只有使用预编译的方法.test\stdafx.cpp
=======================
如果foo目录已经有stdafx.h 但你不想让a.cpp包含它. 而想让a.cpp包含 test目录下的stdafx.h
有两个方法:
1. 如果不使用预编译, 就修改a.cpp里的包含语句, 改成相对或者绝对路径.
2. 整个项目使用预编译头,根目录下的 stdafx.h 本身 作为预编译头文件或者包含到某个预编译头文件里.
注意: 这个时候, 特别有个方法无效:
如果不使用预编译, 通过在附加包含目录最前面包含test\foo目录.或者foo目录的绝对路径的办法. 都无效. 因为vc会先找cpp所在目录