标签: precompiled-headers

在预编译头中放什么?(MSVC)

预编译头文件的最佳候选者是什么?我可以在那里放置STL和Boost标头,即使它们有模板吗?这会减少编译时间吗?另外,减少编译时间的最佳IDE设置是什么?

c++ precompiled-headers visual-c++

38
推荐指数
2
解决办法
9213
查看次数

预编译标题

我有一个示例项目(不是我的)在Visual C++ 6中.我正在尝试将其转换为Visual Studio 2008.

旧项目使用预编译头.现在的问题是:

  1. 什么是预编译头文件?

  2. 由于旧项目使用预编译头.我还将在Visual Studio 2008(新项目)中使用它们.但我得到的错误是"你忘了包含stdafx.h",为了解决这个问题,我在每个源文件中加入了"stdafx.h".这非常有效.但是旧项目在每个文件中都没有包含"stdafx.h"?那么如何选择退出在每个源文件中包含"stdafx.h".因为不是每个源文件都需要"stdafx.h"中定义的包含文件,所以只有少数文件.怎么做的?

编辑: 如何使用预先设定的标题来解释某些文件?

visual-c++-6 precompiled-headers visual-studio-2008

31
推荐指数
2
解决办法
2万
查看次数

stdafx.h:我什么时候需要它?

我看到很多代码,包括stdafx.h.说,我想要预编译的标头.我手动包含所有必需的系统头文件.在那种情况下,还有其他任何理由我应该知道我需要的地方stdafx.h吗?

c++ header precompiled-headers stdafx.h visual-c++

30
推荐指数
1
解决办法
7万
查看次数

xCode 4.4没有获得所有.pch文件头导入?

这是我的.pch文件 -

   //
// Prefix header for all source files of the 'English Club' target in the 'English Club' project
//

#import <Availability.h>

#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
    #import "Helper.h"
    #import "Animations.h"
    #import "Constants.h"
    #import "SoundPlayer.h"
    #import "UAirship.h"
    #import "UAStoreFront.h"
    #import "UIIMagesNames.h"
    #import "UIView+Sizes.h"
    #import "HelpButton.h"
    #import "SoundPlayer.h"
    #import <RestKit/RestKit.h>
    #import "UIHelpSoundFiles.h"


#endif
Run Code Online (Sandbox Code Playgroud)

仍然很常见,Xcode会给我错误,他找不到那些类.(例如帮助者).问题是该项目将被编译并且工作正常,但是我有数百个错误,这些错误会扰乱我寻找真实的错误.

知道为什么吗?

objective-c header-files precompiled-headers

28
推荐指数
2
解决办法
8287
查看次数

在GNU/Linux环境/工具链中,预编译头的优缺点是什么?

预编译的标题似乎可以在大型项目中节省大量时间,但似乎也是一个有点陷阱的痛苦.

使用预编译头文件的优点和缺点是什么,特别是因为它适用于在Gnu/gcc/Linux环境中使用它们?

c++ linux gcc precompiled-headers

24
推荐指数
4
解决办法
6240
查看次数

如何在项目中实现预编译的头文件

我理解预编译头文件的目的和原因.但是,实施它们的规则是什么?根据我的理解,它是这样的:

  1. 将项目设置为使用带有YU指令的预编译头.
  2. 创建stdafx.h文件并将其设置为预编译头.
  3. 将其作为每个.h文件中的top include语句包含在内.

这是对的吗?您是否应该将其包含在预编译头文件中包含的文件中?目前,在遵循我的直觉时,我得到以下编译错误:

错误C2857:在源文件中找不到使用/Ycstdafx.h命令行选项指定的'#include'语句

命令行选项如下:

/ Od/I"../External/PlatformSDK/Include"/ I".."/ I"../External/atlmfc/Include"/ D"_DEBUG"/ D"_UNICODE"/ D"UNICODE"/ Gm/EHsc/RTC1/MDd /Yc"stdafx.h"/Fp"....Output\LudoCore\Debug\LudoCore.pch"/ Fo"....\Output\LudoCore\Debug \"/ Fd".. ..\Output\LudoCore\Debug\vc80.pdb"/ W4/WX/nologo/c/ZI/TP/wd4201/errorReport:prompt

c++ visual-studio-2005 include precompiled-headers visual-c++

24
推荐指数
4
解决办法
4万
查看次数

在现代C++ Builder应用程序中使用预编译头文件的最佳实践是什么?

我目前正在将一个大型RAD Studio 2010项目迁移到XE4.作为其中的一部分,我正在重新创建许多项目文件.我想借此机会确保我们使用最佳的预编译头文件机制,因为似乎有几种方法可以做到这一点.

现在我们只编译32位,但将来会使用64位编译器.

以下是我们目前在2010年所做的工作,以及为什么我不确定在XE4中要做什么:

在RAD Studio 2010中

我们有一个文件PchApp.h,其中包含<vcl.h>许多其他常用的头文件,主要是项目中各种常用核心类的头文件.此标头包含在每个CPP文件的顶部,后跟#pragma hdrstop如下所示:

// Top of .cpp file
#include "PchApp.h"
#pragma hdrstop

// Normal includes here
#include "other.h"
#include "other2.h"
// etc
Run Code Online (Sandbox Code Playgroud)

然后,我们在项目选项的预编译标题部分中进行以下设置:

当前RS2010预编译头设置

编译起来并不是特别快(大约350,000行代码需要12分钟.)我不确定:

  • "注入预编译头文件":这应该注入PchApp.h吗?
  • "缓存预编译头文件(必须与-H或-H"一起使用"xxx")": - H选项是"PCH文件名",因此我们正在使用它,但是预编译头的确定点是它"缓存"或每次编译预编译一次.这有什么额外的区别?
  • 我们应该在.cpp文件中包含两行包含PchApp.h和pragma hdrstop吗?有没有办法在项目选项中执行此操作,而不是在每个文件中复制这两行?他们有必要吗?

换句话说,我不确定这些是正确的还是最佳的设置,但是从阅读文档中我同样不确定什么会更好.我知道我不太了解所有选项 - 这个问题的一个原因:)

在RAD Studio XE4中

XE4 32位编译器的选项对话框是相同的,但有两件事让我感到困惑和/或让我不确定当前的2010方法是最好的.

1.默认行为

在创建新的VCL Forms项目时,IDE会创建一个默认名为Project1PCH1.h的标头,该标头旨在作为项目的预编译标头. 此标头包含<vcl.h><tchar.h>,并在项目管理器中显示为节点.它不包含在默认的Form1.cpp中,但#include <vcl.h>后面#pragma hdrstop是Form1.cpp的最顶层,后跟其他标题.

使用此标题的新项目的默认XE4设置对话框是: XE4默认预编译头设置

我(天真地?)正在假设默认值实际上是最佳/最佳设置.有些事情困扰我:

  • Project1PCH1.h在任何地方的预编译头设置中都没有提到项目的假定预编译头.
  • 标头不会被缓存
  • 未指定PCH文件名(这应该是Project1PCH1.h?)
  • .cpp文件也不包括Project1PCH1.h …

c++builder precompiled-headers c++builder-xe4

23
推荐指数
1
解决办法
1451
查看次数

具有混合C和C++的预编译头

我在C项目中使用预编译的头文件,但我们正在将.CPP文件集成到项目中.

这是错误:

Error   1   fatal error C1853: 'Debug\MuffinFactory.pch' precompiled header
file is from a previous version of the compiler, or the precompiled header is C++
 and you are using it from C (or vice versa)    
c:\users\blake\desktop\projects\muffinfactory\source\main.cpp   1
Run Code Online (Sandbox Code Playgroud)

我们只需要在我们的项目中编译一个.CPP,但我们确实需要预编译的头来节省编译时间(Windows.h等).

我应该如何组织我的项目呢?

c c++ precompiled-headers visual-studio

21
推荐指数
2
解决办法
3万
查看次数

错误C1854:无法覆盖在目标文件中创建预编译头期间形成的信息

foo.cpp(33918) : fatal error C1854: cannot overwrite information formed 
during creation of the precompiled header in object file: 'c:\somepath\foo.obj'
Run Code Online (Sandbox Code Playgroud)

咨询MSDN关于这一点给了我以下信息:

在为同一文件指定/ Yc(创建预编译头)选项后,指定了/ Yu(使用预编译头)选项.某些声明(例如声明包括__declspec dllexport)使其无效.

在这种情况下,我们使用dllexport和预编译头文件.有没有人遇到过这个并且知道任何解决方法?非常感谢任何有关这个问题的信息.

谢谢

c++ precompiled-headers dllexport visual-studio

20
推荐指数
1
解决办法
1万
查看次数

Visual Studio 2010,Intellisense和PCH:丑陋的stdafx.h有哪些替代方案?

我最近切换到Visual Studio 2010,而Intellisense在使用boost库时不需要花半分钟时间显示,Microsoft的建议似乎使用了预编译的头文件.

除了我之前从未使用过它们(除非被Ugly ATL Wizards(TM)强迫),所以我四处寻找它们是如何工作的.

基本上,大集中stdafx.h方法似乎是完全错误的.我从不想在所有来源中包含(甚至便宜)一大堆头文件.由于我不使用Windows库(我使用C++/CLI更高级别的包装器,然后使用.NET与外界交谈),我没有"一整套不变的巨大标头".正好boost和标准的库标题分散在各处.

一个有趣的方法解决这个问题,但我无法弄清楚如何使这项工作.似乎每个源文件必须编译两次(如果我错了,请纠正我):一次使用/ Yc,一次使用/ Yu.这增加了开发人员的负担,必须手动调整构建系统.

我希望找到一些"为每个源文件自动生成一个预编译的头文件"技巧,或者至少是一些"最佳实践",但大多数人似乎都乐于将这个世界纳入其中stdafx.h.

我可以在每个源文件的基础上使用预编译头文件有哪些选项?我并不真正关心构建时间(只要它们不会飙升),我只想让intellisense 快速工作.

c++ precompiled-headers visual-studio visual-c++

18
推荐指数
2
解决办法
3650
查看次数