问题标签 [pch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12600 浏览

c++ - 在 Visual Studio 中的项目之间共享预编译头文件

我有一个包含许多 Visual C++ 项目的解决方案,所有项目都使用 PCH,但有些项目针对特定项目的需要打开了特定的编译器开关。

这些项目中的大多数在各自的 stdafx.h(STL、boost 等)中共享相同的标题集。我想知道是否可以在项目之间共享 PCH,这样我就可以拥有一个解决方案中的大多数项目都可以使用的通用 PCH,而不是为每个项目编译每个 PCH。

似乎可以在项目设置中将 PCH 的位置指定为共享位置,所以我有预感这可以工作。我还假设使用共享 PCH 的所有项目中的所有源文件都必须具有相同的编译器设置,否则编译器会抱怨 PCH 和正在编译的源文件之间的不一致。

有没有人试过这个?它有效吗?

一个相关的问题:这样的分片 PCH 是否应该过度包容,还是会影响整体构建时间?例如,共享 PCH 可能包含许多广泛使用的 STL 标头,但某些项目可能只需要<string><vector>. 当优化器不得不丢弃所有由 PCH 拖入项目的未使用的东西时,使用共享 PCH 节省的时间是否必须在构建过程的稍后阶段归还?

0 投票
2 回答
1802 浏览

c++-cli - C++ / CLI 预编译头文件:它们是如何工作的?

我正在尝试编写一个混合模式 DLL,我们称之为“客户端”,以用它们的托管等效项替换一些非托管类。在我的个人机器上一切正常,但是当我签入源代码时,我们的构建机器不会构建项目。它无法识别我在另一个名为“Core”的 DLL 中使用的托管类。

我认为这个问题与预编译的头文件有关。原因如下:

为了使用“Core”中的类,我在“Client”项目中添加了对“Core”项目的引用。如果我删除此引用,然后在我的个人计算机上构建项目,它仍然可以工作。但是,CLR PCH 在删除引用后不会重新编译。如果我重新编译 CLR PCH,然后编译项目,它会失败并出现与构建机器上相同的错误:无法识别托管类。

在我看来,您导入的 DLL 中的托管类是在预编译头文件中定义的。我无法验证这一点,但这是我最好的猜测。有没有人对这个问题有任何见解?混合 DLL 中的项目引用是否通过将挂钩放入托管 PCH 来解决?

重现步骤

以下对我来说毫无意义:

  1. 获取客户端构建。
  2. 删除从客户端到核心的引用。编译客户端。客户端仍在构建。这不是预期的。
  3. 重新编译Client PCH,然后编译Client。编译客户端失败:“核心”中的类未定义。这是预期的行为。
  4. 添加对Core的引用,编译。由于同样的原因,编译客户端失败。这不是预期的
  5. 重新编译Client PCH,然后编译Client。客户端编译良好。

我从这个实验中得出的结论是,引用是通过预编译的头文件插入到项目中的,并且它的工作方式有些问题,至少在我们的构建机器上是这样。

0 投票
1 回答
168 浏览

gcc - 前沿库和预编译头文件大小

Q1:我的 GCC 预编译头文件占用了 150 mb ——是的,我正在使用来自 Boost 的晦涩的 TMP 库。有人有任何从这么大的 PCH 中受益的秘诀吗?任何可以用来创建 ram-disk(tmpfs) 或其他东西(透明/即时)的 makefile 片段?

Q2:有什么方法可以守护 GCC 吗?-- 毕竟,如果它保持活动状态,则不必每次都重新加载 PCH

Q3:(a)C++0x 是否会通过任何特定的改进来减少这个问题,以更好地表示 TMP 程序,(b)或者也许 CLANG 会改变编译过程?

ps,MSVCC 在这方面做得比 GCC 好得多。

pss,我有一个偷偷怀疑GCC没有拿起我的PCH。

0 投票
2 回答
1796 浏览

c++ - 我可以在 1 个项目中使用多个 PCH 文件吗?

我想使用 PCH 文件来加速构建,所以我将 PCH 文件存储在一个单独的文件夹中,并在以后构建项目时重用它。

但我的 stdafx.h 中有一些#import *.dll。因此,如果 *.dll 中的某些内容发生了变化,则需要重新创建 PCH 文件。

我的问题是我是否可以在 1 个项目中使用多个 PCH 文件,这样我就可以将导入的 *.dll 放到另一个 PCH 中,并且只有在 *.dll 中发生更改时才重新创建这个文件。

提前致谢 :)

0 投票
1 回答
2167 浏览

iphone - Objective-C Xcode:Prefix.pch 问题?

我有两个相互独立的文件。

我们就称它为 Class1 和 Class2。

在 Class1 中,我需要 Class2,在 Class2 中我需要 Class1。

我有一个前缀文件,其中包含了我的所有文件,但我遇到了一些语法错误,因为我这样做了

我将如何定义它们,以便它们可以相互使用?

我究竟做错了什么?

0 投票
4 回答
40658 浏览

ios - iOS Prefix.pch 最佳实践

我见过许多开发人员在他们的 iOS 项目的 Prefix.pch 中添加了各种便利宏。

您建议(或不)向 iOS Prefix.pch 文件添加什么?您的 Prefix.pch 是什么样的?

0 投票
1 回答
2785 浏览

objective-c - XCode PCH 错误

据我所知,以前没有人问过这个问题。我正在构建一个 cocoa touch 静态库,直到昨天,在我将项目签入 SVN 之后,它就不再构建,并且我的 PCH 中有 36 个错误。这就是我的 PCH 的全部内容,过去我没有发现任何问题:

我得到这些错误:

几件事:

  1. 我没有使用 UIKit 框架,为什么会出现与 uikit 相关的错误?

  2. 对 MYPROJECT 垃圾感到抱歉,但该项目现在是机密的。

谢谢大家

0 投票
3 回答
5577 浏览

iphone - 编译 Prefix.pch 文件时出错,导致更大的问题

更新 2

我发现,如果我将“Base SDK”更改为“iOS Simulator 3.2”(iPad ???),它不会在构建和分析时给我这个错误......但这应该是一个 iPhone 应用程序。我正在运行 XCode 3.2.4... 创建项目时是否遗漏了什么?我选择 iPhone 作为目标设备,不知道发生了什么。

原来的

我在我的 iPhone 应用程序中发现内存泄漏时遇到问题。我尝试运行“构建和分析”,但是当它到达 MyApp_Prefix.pch 文件时,它说“分析器由于解析错误而跳过了这个文件”——然后 50% 的文件说“由于解析错误而跳过了这个文件- /var/folders/ ... /MyApp_Prefix.pch 文件未找到”。

App实际编译运行,Prefix.pch文件确实存在。

当我打开出现在第一个错误下的所有错误时,它开始打开框架中的文件,我不知道为什么那里会有问题。

替代文字

这是 .pch 文件的内容:

更新 以下是当我单击“函数声明符后的预期函数体”、“预期类型”等时打开的文件... CGPDFContext.h UIView.h UIApplication.h UITextView.h UIWebView.h

这些都位于框架中。

我尝试创建一个全新的项目并导入我现有的类,它给了我同样的错误。

我尝试在我的一个旧项目上运行 Build & Analyze,它使用相同的框架,并且运行良好。

0 投票
2 回答
3052 浏览

c++ - Xcode PCH 问题 - PCH 中的项目未包含在源文件中

我刚刚使用 Xcode 创建了一个“C++ 标准动态”库项目,并使用 LLVM 2.0 进行了编译。我注意到 PCH 文件包含该行#include <iostream>,但文件Test.cp也包含该#include <iostream>语句。

奇怪的是,通过删除Test.cp中的语句,构建失败并出现错误,Semantic Issue – Use of undeclared identifier 'std'尽管该语句也包含在 PCH 中。

为什么 PCH 不起作用?有没有我缺少的设置?我以前从来没有对他们做过任何事情(因为他们总是只是工作)所以我不确定是什么导致它不起作用,即使是一个全新的项目。

0 投票
2 回答
880 浏览

objective-c - XCode 预编译 pch 两次;第二次用错语言

我在 XCode 中有一个 Objective C 项目。在构建时,XCode 会预编译我的前缀 PCH 文件两次。第一次,它使用 arguments -x objective-c-header,并且工作正常。第二次,它使用-x c-header,它失败了(由于文件包含 Objective C 代码)。

我有另一个设置相同的项目,但它构建得很好。(PCH 只预编译一次,使用 Objective C。)我并排比较了两个项目的构建设置,没有任何相关的不同。我并排比较了目标的构建设置,同样没有相关差异。

我尝试清理所有目标并重建,但没有运气。我尝试重新启动 XCode,但没有运气。我 grep 了我的项目文件夹c-header,但它只显示在构建日志中。

这可能是什么原因造成的?