需要包含两次预编译头

Posted

技术标签:

【中文标题】需要包含两次预编译头【英文标题】:Need to include the precompile header twice 【发布时间】:2017-02-16 12:00:33 【问题描述】:

我的应用程序运行正常,但我正在尝试清理一些东西。当我在源文件中包含预编译头文件时,会发生以下情况。

基本上第一行有下划线,好像它有问题一样,所以我必须在下面再次包含它,并使用正确的路径......但我需要两者,否则它不会编译。

有什么想法吗?

【问题讨论】:

你是说去掉第一个就不能编译?您能否将出现的错误的具体文本添加到问题中?另外,你知道***.com/a/26330290/4944425 吗? 预编译头文件必须只有一个,项目中的所有源文件都必须同意它是哪一个。非常高的几率,第一个根本没有被使用,并且你收到了关于它的警告,程序员由于某种原因经常看不到。通过告诉我们您所看到的来改进您的问题。 你可能有 2 个文件...一个在适当的位置用于预编译的头文件,另一个在其他地方有正确的内容。 嘿伙计们,我会在早上检查,只是为了清楚这两行都需要,否则无法编译。因此,我目前无法删除任何一个文件,我会仔细检查是否只有一个建议的文件,并在明天回复您。 一般以我的经验 (VS-) 预编译头文件是问题的根源——我很久以前就停止使用它们了。如果您确实需要加快编译速度,请尝试使用其他东西 - 例如IncrediBuild 等工具... . 【参考方案1】:

Visual Studio 仅在名称匹配时才使用预编译标头(名称不区分大小写)。比方说,在你的项目中设置了一个预编译头名称StdAfx.h,所以只有当代码包含#include "stdafx.h"时才会使用预编译头。

#include "..\stdafx.h" 不被识别为预编译头,即使它是真实位置。

您需要将 stdafx.h 位置的包含路径添加到项目设置中,然后标题 #include "stdafx.h" 将正常工作。

预编译头文件的另一个常见问题是包含指令位于头文件中。它应该始终位于源文件 (.ccp) 中。

【讨论】:

你错了后者。 #include可以和其他头文件无缝使用。只需查看标准库标题即可查看。 检查的机会仍然不错,希望在一周内完成,但这听起来很有希望。谢谢。 @SemyonBurov,想象一下#include "stdafx.h" 在某个库的标题中。它在编译库时可以无缝工作,但是在编译使用该库的项目时,会使用项目中的预编译头文件。现在它不会编译,除非您的项目预编译头文件包含所有库需要。现在,它听起来并不无缝。 这行得通,由于某种原因,我不得不将项目的根目录作为包含目录包含在内,默认情况下它不是包含目录吗?无论如何,这样做后,问题就消失了。 对不起,如果我知道我必须按下那个图标,我会早点给予赏金!大声笑

以上是关于需要包含两次预编译头的主要内容,如果未能解决你的问题,请参考以下文章

是否可以仅通过编写 debian/rules 编译两次并构建单独的包?

每次编译APP,都需要run两次,APP才自动启动

vscode保存代码自动编译两次是怎么回事

Sass 文件编译两次

有条件地包含 C++ 标准库

用不同的语言编译同一个文件两次的惯用方法是啥?