问题标签 [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 投票
1 回答
4811 浏览

c++ - 将预编译头文件与静态库项目一起使用

我需要一些关于如何设置我的项目的建议。我正在构建一个静态库,并想在我走得太远之前知道我使用预编译头文件的方式是否正确。

到目前为止,我的 stdafx 文件只包括(对于 DWORD 等类型)和(对于 std::string)。

我构建了一个名为 TestFuncs.cpp/h 的简单 cpp/header 组合

TestFuncs.cpp:

测试函数.h

此处的代码可以正确编译。我遇到的问题是,当我想在另一个项目中使用这个静态库时,我通常会执行 #include "path_to_my_static_lib_project/TestFuncs.h"

但是,这个问题基于 TestFuncs.h,DWORD 和字符串在当时都是未知的,因为它们是从 stdafx.h 文件定义的类型。

我想出的一种解决方案(我不知道这样做是否正确)只是在 #pragma once 之后将 stdafx.h 包含在 TestFuncs.h 的顶部。现在项目工作文件是否使用预编译头文件。

这是应该如何完成的,还是有正确的方法?

谢谢你。

0 投票
1 回答
337 浏览

c++ - 如果 stdafx.h 中已包含特定标头 - 我是否需要(必须/应该)将其明确包含在 .cpp 文件中?

如果一个特定的头文件已经包含在 stdafx.h - 我是否需要(必须/应该)将它明确地包含在一个 .cpp 文件中(它已经包含了 stdafx.h)?

0 投票
2 回答
4724 浏览

c++ - Visual Studio 使用 vc90.pdb 做什么?

根据http://msdn.microsoft.com/en-us/library/yd4f8bd1.aspx,一个项目有 2 个 .pdb 文件。

project.pdb 我用来允许稍后加载小型转储,但是 vcx0.pdb 到底是用来做什么的?如果它丢失了,那不是问题,我不需要为任何东西存储它。

我正在尝试在不同的项目之间共享一个 PCH,而这个文件是唯一引起问题的东西。如果我将使用 PCH 创建的 vcx0.pdb 复制到所有项目,这些项目将使用此文件作为基础并向其中添加自己的符号。如果不给这些项目这个 .pdb 文件,它们就会失败。

我注意到了几件事:

  • 报告丢失 vcx0.pdb 的警告 LNK4099 似乎并不重要。
  • 如果我使用 /Fd 将多个项目指向同一个文件,并禁用并行构建以使其正常工作,则每个项目都会使用自己的符号不断增加
0 投票
2 回答
3546 浏览

c++ - 使用 GNU make 创建几个预编译的头文件

我使用 gcc(运行方式g++)和 GNU make。我使用 gcc 预编译头文件precompiled.h,创建precompiled.h.gch;Makefile 中的以下行执行此操作:

一切都很好,直到我不得不g++使用不同的命令行参数运行。这种情况下,即使precompiled.h.gch存在也不能使用,编译会慢很多。在 gcc 文档中,我读到要处理这种情况,我必须创建一个名为的目录precompiled.h.gch并将预编译的头文件放在那里,每组g++命令行参数一个文件。

所以现在我想知道我应该如何更改我的 Makefile 来告诉g++以这种方式创建 gch 文件。也许我可以运行g++只是为了测试它是否可以使用precompiled.h.gch目录中的任何现有文件,如果不能,则生成一个具有唯一文件名的新预编译头文件。

gcc 是否支持进行此类测试?

也许我可以用另一种方式实现我想要的?

0 投票
2 回答
32079 浏览

xcode - 从 Xcode 项目中删除 Prefix.pch 文件可以吗?

Xcode 项目会自动生成 Prefix.pch 文件。当我删除此文件并尝试构建时,我收到构建错误,提示“ * _Prefix.pch”文件丢失。

  • Prefix.pch 文件是用 Xcode 编译的必须文件吗?
  • 如何在没有 Prefix.pch 文件的情况下构建?
0 投票
1 回答
637 浏览

c++ - Visual Studio 的预编译头文件包含什么?

问题涉及由 Visual Studio 编译器创建的 .pch 二进制文件的内容。它包含什么?它只是头文件的解析树,还是目标代码?

考虑这个例子:

在要预编译的集合中包含此标头会导致 vector<int> 的完整模板实例被编译并添加到 .pch 中吗?

提供更多背景信息;如果只预编译解析树,这意味着实例化模板的目标代码仍将在每个编译单元创建一次,从而增加编译和链接时间。因此,即使启用了预编译头文件,“统一构建”/减少编译单元仍然是减少构建时间的一个相关因素。

0 投票
3 回答
1361 浏览

c++ - 预编译头文件:该做什么和不该做什么?

我知道预编译的标头用于加快编译速度,但是对于我应该在其中包含哪些文件有什么注意事项吗?例如,我有一个项目使用了很多 boost 库,所以我只在其中包含了 boost 头文件stdafx.h(我使用的是 VS2008)。我也应该在其中包含每个标准头文件吗?即使我,例如,包括<vector>但从不使用,这是否会增加我的可执行文件的大小std::vector?在 stdafx.h 中包含我自己项目的头文件是不是一个坏主意?

0 投票
1 回答
662 浏览

precompiled-headers - 预编译头文件

什么是预编译头文件?它们什么时候使用?

0 投票
2 回答
8918 浏览

c++ - 使用 boost 库时加快编译/链接时间

我正在使用Boost Program Options,用它编译非常小的 C++ 代码需要相当长的时间(10 秒甚至更多)。在没有 boost 库的情况下编译代码需要 1 秒。

知道如何使用 boost 库来提高编译/链接时间吗?它是跨平台的,所以我需要用 Mac OS X/Linux/PC 编译代码。

0 投票
1 回答
395 浏览

c++ - 预编译头文件和 ASLR 有什么问题?

我在几个预编译标头和地址空间布局随机化不兼容的站点上阅读它。是什么让它们不兼容?修复它需要什么?

我的问题与操作系统无关我听说这是带有 grsecurity 的 linux 和较新的 Windows 版本上的问题。(而且我不知道还有什么还有 ASLR。)