vc包含路径/附加包含路径/include的机制

以下结论还需要进一步验证,所以会不断修正.


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所在目录



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值