And*_*ian 5 c++ precompiled-headers visual-studio visual-studio-2015
我想要做的是设置一个项目,如果设置了预编译标头,则无关紧要.stdafx.hpp是我的PH
我的主要问题是我有多个目录上的文件,而不仅仅是项目根目录.我尝试了什么:
如果我
#include "stdafx.hpp"
Run Code Online (Sandbox Code Playgroud)
PH设置无处不在,但如果我将其停用,它会抱怨,因为子目录中的文件无法找到它.
如果我
#include "../stdafx.hpp"
Run Code Online (Sandbox Code Playgroud)
在子目录中的文件中,它在没有PH的情况下工作正常,但是对于PH,编译器抱怨stdafx.hpp没有包含它.
如果我stdafx.hpp使用相对或绝对路径设置强制包含文件,编译器给了我错误(现在不能记住,如果有必要我将重现它).
那么,可能是什么解决方案呢?
规范解决方案很简单:不要包含预编译的头文件(默认情况下为stdafx.h).如果您的代码需要使用预编译头进行编译,请使用/ FI(名称强制包含文件)编译器开关:
此选项与在命令行,CL环境变量或命令文件中指定的每个源文件的第一行上的#include指令中使用双引号指定文件具有相同的效果.
这允许您使用预编译的头文件,而无需修改源代码.
在#include Directive(C/C++)下概述了使用带双引号的#include指令的规则:
引用形式:
预处理器按以下顺序搜索包含文件:
- 与包含#include语句的文件位于同一目录中.
- 在当前打开的包含文件的目录中,按照打开它们的相反顺序.搜索从父包含文件的目录开始,并继续向上遍历任何祖父包含文件的目录.
- 沿着每个/ I编译器选项指定的路径.
- 沿着INCLUDE环境变量指定的路径.
使用/ I(附加包含目录)编译器开关包含用于生成预编译头的头文件的目录,然后只允许您编写
/FIstdafx.hpp
Run Code Online (Sandbox Code Playgroud)
没有设置/项目拓扑的组合可以让您简单地打开或关闭预编译的标头.的/ Y,/ FI,和/ I编译器开关必须一起使用,或完全移除.要将一组配置更改为一个单元,可以使用属性页(有关详细信息,请参阅使用项目属性).
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |