c++ - 设置一个项目,该项目将使用和不使用预编译头文件进行编译

标签 c++ visual-studio visual-studio-2015 precompiled-headers

我想做的是建立一个项目,在这个项目中,是否设置预编译头都无关紧要。 stdafx.hpp 是我的 P.H.

我的主要问题是我有多个目录的文件,而不仅仅是项目根目录。我尝试了什么:

  1. 如果我

    #include "stdafx.hpp"
    

    在设置 PH 的情况下,所有地方都可以正常工作,但如果我停用它,它会提示,因为子目录中的文件找不到它。

  2. 如果我

    #include "../stdafx.hpp"
    

    在子目录中的文件中,没有 PH 也能正常工作,但是有了 PH,编译器会提示 stdafx.hpp 没有被包含。

  3. 如果我将强制包含文件设置为 stdafx.hpp,无论是相对路径还是绝对路径,编译器都会给我错误(现在不记得了,如果有必要我会重现它).

那么,解决方案是什么?

最佳答案

规范的解决方案很简单:不包含预编译的头文件(默认情况下是stdafx.h)。如果您的代码需要使用预编译 header 进行编译,请使用 /FI (Name Forced Include File)编译器开关:

This option has the same effect as specifying the file with double quotation marks in an #include directive on the first line of every source file specified on the command line, in the CL environment variable, or in a command file.

这允许您使用预编译的头文件,而无需修改您的源代码。

使用带双引号的#include 指令的规则在#include Directive (C/C++) 中列出。 :

Quoted form:

The preprocessor searches for include files in this order:

  1. In the same directory as the file that contains the #include statement.
  2. In the directories of the currently opened include files, in the reverse order in which they were opened. The search begins in the directory of the parent include file and continues upward through the directories of any grandparent include files.
  3. Along the path that's specified by each /I compiler option.
  4. Along the paths that are specified by the INCLUDE environment variable.

使用 /I (Additional Include Directories)编译器切换到包含用于生成预编译头的头文件的目录,然后只允许您编写

/FIstdafx.hpp

没有允许您简单地打开或关闭预编译 header 的设置/项目拓扑组合。 /Y 、/FI 和/I 编译器开关必须一起使用,或者完全删除。要将一组配置作为一个单元进行更改,您可以使用属性页(有关详细信息,请参阅 Working with Project Properties)。

关于c++ - 设置一个项目,该项目将使用和不使用预编译头文件进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39165635/

相关文章:

与 Windows 95 兼容的 C++ 程序

visual-studio - VS 2010 似乎没有与 Razor 相关联(没有突出显示或智能感知)

asp.net-mvc-5 - Visual Studio 2015 - Bower 不工作

ios - 使用 Visual Studio Tools for Apache Cordova 创建 xcarchive 而不是 ipa?

c++ - 如何在 qt creator 和 msvc 中使用 boost 正则表达式

c++ - QTextEdit 插入不一致的 HTML(重复/一致地执行相同的操作时)

c++ - 如何在 C++ 中读取此日志文本文件

asp.net - 将调试器绑定(bind)到所有 IP 地址,而不仅仅是 localhost

asp.net - 在 Webform 中设计/拆分悬挂

c++ - 为什么我不能在指定值上使用++?