问题标签 [precompiled-headers]

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 投票
4 回答
3699 浏览

c++ - Visual Studio 2010、Intellisense 和 PCH:丑陋的 stdafx.h 的替代品是什么?

boost我最近切换到 Visual Studio 2010 并且 Intellisense 在使用库时不会花半分钟时间显示出来,微软的建议似乎是使用预编译的头文件。

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

基本上,大中心stdafx.h化方法似乎完全错误。我从不想在我的所有源代码中包含(甚至便宜)一大堆头文件。因为我不使用 Windows 库(我制作 C++/CLI 更高级别的包装器,然后使用 .NET 与外界对话),所以我没有“一大堆不变的巨大标题”。只是boost和标准库头文件散落一地。

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

我希望找到一些“为每个源文件自动生成一个预编译头”的技巧,或者至少是一些“最佳实践”,但大多数人似乎对将世界包含在stdafx.h.

在每个源文件的基础上,我可以使用哪些选项来使用预编译的头文件?我并不真正关心构建时间(只要它们不飙升),我只希望智能感知能够快速工作。

0 投票
4 回答
1172 浏览

c++ - 为什么 stdafx.h 中不需要标头保护?

我不明白为什么在预编译的头文件中不使用头文件保护......有什么想法吗?

0 投票
12 回答
170666 浏览

c++ - 如何修复构建时缺少的 .pch 文件?

当我在 Visual Studio 中构建我的 c++ 解决方案时,它抱怨缺少 xxxxx.pch 文件。我是否缺少一个设置来获取预编译的标头?

这是完整性的确切错误:

0 投票
1 回答
2704 浏览

android - 如何在 Android NDK 中使用预编译的头文件

我有一个编译 c++ 文件所需的 .pch 文件。我正在使用 Android NDK 从几个 c++ 文件中创建一个库,然后在我的 Java 程序中使用它来调用库函数。任何人都可以告诉如何或在哪里包含 .pch 文件,以便编译器可以识别它。

0 投票
2 回答
268 浏览

c++ - 为什么还要创建对象,创建预编译头时?

我想在 make 文件中创建一个 .pch 。cl /nologo /c /YcPrecompiled.hpp /FpPrecompiled.pch Precompiled.cpp

让我感到困惑的是:为什么这个命令还创建一个名为 Precompiled.obj 的对象

我应该将此对象链接到结局 exe 吗?

在网上搜索后,我找到了一个关于msdn的教程:http: //msdn.microsoft.com/en-us/library/d9b6wk21 (v=VS.71).aspx 一行我看不懂:

创建pch时,为什么需要applib.cpp和myapp.cpp。它还创建了两个对象,applib.obj,myapp.obj,除了 .pch 文件......为什么?

欢迎任何指示。非常感谢!

0 投票
3 回答
1042 浏览

c - 反编译一个 gch 文件

我不小心删除了一个我没有添加到版本控制中的 .h 文件,但我仍然拥有 .h.gch。有没有办法反编译.gch?

0 投票
3 回答
411 浏览

c++ - 预编译头文件 C++

认为

我们有 c++ 项目(静态)库“A”,它使用 DirectX 头文件作为预编译头文件来实现基本图形引擎。

我们有项目(静态)库“B”,它使用“A”头文件作为预编译头文件来实现游戏引擎

我们有 c++ 项目“C”,它使用两个以前的项目来实现一个游戏

现在我的问题是:

项目“C”有什么办法只包括项目“B”而不包括(DirectX 标头和“A”标头)?

或者另一方面

有没有办法将(DirectX 和项目'A')嵌入到项目'B'?

坦克

0 投票
1 回答
5697 浏览

c++ - 使用 cmake 有条件地生成源输入文件

我在 C++ 项目中使用 cmake。我想在 GCC 中使用预编译的头文件。

我想运行cmake一次,然后在运行时make,我希望执行以下操作:

  1. 在整个源代码树上运行我的自定义工具(python 脚本)。它在一些子目录中生成 precompiled.h 头文件。其目的是扫描 *.h 和 *.cpp 以查找#include,并将它们移动到常见的 precompiled.h 文件中。
  2. g++ -c precompiled.h -o precompiled.h.gch仅当 precompiled.h 文件在步骤 1 之后发生更改时,才生成 GCC 的预编译头文件 ( )。
  3. 构建过时的目标(在第 2 步之后。因为我想使用 .gch 文件)

我设法添加了依赖项,所以每当我构建任何目标时,都会执行我的 python 脚本的目标(这很丑,因为现在每个目标都必须依赖于单个 global_init 目标)。我也可以修改我的 python 脚本,所以它不会在不需要时修改 precompiled.h。

但我不知道下一步该做什么。有没有办法告诉 cmake 它应该运行我的自定义脚本并在确定是否必须创建 precompiled.h.gch 之后?现在它总是被构建(这个文件包含许多#include,所以它需要一些时间)。基本上:

  1. 执行 python 脚本 -> precompiled.h 可能会更新
  2. 检查 precompiled.h 时间戳以及它是否较新 -> 构建 precompiled.h.gch
  3. 标准编译步骤

我看过很多地方,但是 cmake(和 make)计算依赖项的方式似乎太弱了,无法完成这项任务。

在这个问题中: lazy c++ 编译总是在lazycpp 执行之后发生。在我的情况下,这不是最佳选择。

0 投票
3 回答
25915 浏览

c++ - 预编译头文件和 Visual Studio

有没有办法设置 Visual Studio 解决方案参数,以便它只创建预编译的标头而不构建整个解决方案。具体来说,它是一个巨大的 C++ 解决方案,本身包含许多项目。

谢谢你。

0 投票
0 回答
519 浏览

visual-c++ - Avoiding implicit precompiled header dependencies?

We are using a precompiled header to include library files such as Boost and Windows.
Our precompiled.h is included explicitly at the top of each .cpp file in order to work with the precompiled header commands (/Yc, /Yu, and /Fp). I accepted that as necessary.

Recently, however, I found /FI, which forces an include file at the top of the source file. I tried using it to force-include precompiled.h instead of including it explicitly, and sure enough, it worked.
This would allow us to omit the precompiled header (which is an implementation detail, as far as I am concerned), and only specify the actual dependencies of the file.

Unfortunately, it looks like the only way to validate that we aren't relying on implicit dependencies provided by precompiled.h is to periodically run through a build without /FI"precompiled.h" to see which files have a problem.
This is fairly onerous. Is there a better way?