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

c++ - VS2008 win32 项目默认 - 移除默认预编译头文件

我已经通过所有选项来尝试找到一种方法来让 IDE 让我创建一个没有预编译头文件的新 win32pject。我已经阅读了这个论坛上的每一个帖子,里面都写着“precpmpiled headers”,我得到的最接近的是:

预编译头文件

使用 2008 pro(不是表达,虽然行为似乎相似)我去:

文件 -> 新建 -> 项目

这将打开 New Project 对话框,在其中我选择 Visual C++ Win32 Project,输入名称并点击 OK。

然后我得到“Win32 应用程序向导”。将应用程序类型设置为“Windows 应用程序”,应用程序设置窗格将不允许我取消选中预编译的标头。该复选框是灰色的。如果我选择“控制台应用程序”,我可以取消选中它,但我正在创建一个 GUI 应用程序。

当我单击完成时,我在 xxx.cpp 中得到 6 码代码、四个头文件和强制性的 stdafx.cpp。

也许我可以删除和删除所有这些东西,然后进入属性并关闭 PCH,但这对于我想编写的许多小项目示例来说是个麻烦事。

我只想要一个将编译为 win32 应用程序的空项目,那么如何将 PCH 默认值更改为 NONE?

0 投票
1 回答
1992 浏览

visual-studio - Is including resource.h in precompiled header a good idea?

The VS-IDE will write //{{NO_DEPENDENCIES}} to resource header files. This comment is actually a feature that prevents (unnecessary) rebuilding of cpp files that include the resource header.

But, like stated in the MSDN, this can lead to "undesirable side-effects".

In our project we do have the resource.h included in the stdafx.h for pre-compilation. Unfortunately the precompiled header is not rebuild, if the resource file changes...

If the NO_DEPENDENCIES is removed, it works (but it's written again, if resources are changed via IDE).

Is there a way to prevent the IDE from writing //{{NO_DEPENDENCIES}} to the resource.h file every time the file was changed?

I think the best way would be to exclude the resource.h from the precompiled header file and re-include them in the needed .h and .cpp files. This way only the affected files would need to be (manually!) rebuild and not all files (which would happen, if the pch is recompiled).

Any comments?

0 投票
2 回答
383 浏览

gcc - 摆脱预编译的头文件

好的,我有适用于 Mac 和 Windows 的旧 Metrowerks 代码,以前的开发人员对这个代码库构建的每个项目都使用了预编译的头文件。

从概念上讲,如何摆脱预编译的标头?

您是否将 .pch 的内容移动到 core.h 并将其包含在所有类 .h 文件中?

我想转向使用 CMAKE 进行构建,虽然有一些技巧可以使预编译的头文件工作,但我认为最好删除对它们的依赖项。

有些人可能会说编译速度,但我不是在比赛,我已经拥有快速的设备,我更感兴趣的是如何摆脱预编译的头文件。

0 投票
2 回答
1563 浏览

c++ - 预编译标准库头文件 - C++

在我的项目中,不同的文件中使用了几个 STL 标头。我读到了,将所有这些头文件放在一个头文件中并在我的文件中使用该头文件将允许编译器预编译头文件,这可能会导致更快的编译时间。

如果我理解正确,我需要像下面这样写。

现在包括stl.hpp所有需要访问 STL 的文件。这个对吗?

我的文件很少会只使用vector头文件中的功能。但是如果我按照上述方法,它将包含不必要的标题。这会有什么问题吗?如果我包含头文件并且没有使用其中的任何内容,是否会生成任何代码?

任何帮助都会很棒!

0 投票
3 回答
21987 浏览

macos - 在 OSX 上预编译头文件和编译通用对象

我们为我们的项目使用带有 GCC 的预编译头文件,并像这样构建它们:

现在我正在 OSX 10.6 上构建项目,并尝试使用同时为所有架构构建的漂亮特性,如下所示:

但是,这似乎不适用于预编译的标头:

编辑:正如 Mark 根据 XCode 指出的,必须为每个体系结构单独构建预编译头文件,所以我的问题是,是否有任何方法可以让 gcc 在构建通用对象时使用正确的预编译头文件。

我确实意识到我可以像 XCode 那样完全独立地构建每个架构,但我更愿意利用同时构建它们的可能性,而不必弄乱不同的构建配置。

0 投票
1 回答
981 浏览

visual-c++ - 在 Visual Studio 中重建除预编译的所有头文件

如何配置 VC++/Solution/Projects 来重建除预编译头之外的所有头文件?

0 投票
2 回答
1050 浏览

c++ - #pragma once 等价于 c++builder

#pragma onceCodegear RAD Studio 2009有什么等价物吗?

我正在使用预编译的头文件向导,我想知道在包含头文件时是否仍然需要使用包含防护?

0 投票
2 回答
9970 浏览

gcc - gcc 错误:无法创建预编译头文件

我在名为 utypes.h 的头文件中有一些有用的 typedef。我决定使用 make 并且从那时起还没有找到编译它的方法。

当我执行gcc -Wall -c utypes.h生成 utypes 的 .o 对象时,出现以下错误:

我在这里做错了什么?谢谢。

0 投票
3 回答
310 浏览

c++ - 预编译的头文件设计问题

我有使用预编译标头的代码。(以前由其他人完成)

其中,它们包括几个 .h 文件。

如果我有使用当前不在现有预编译头文件中的通用 .h 文件的类,将它们扔进去会有什么真正的好处吗?也许编译速度,但我认为它也会清理类/标题?

什么是预编译头文件的做什么和不做什么?

0 投票
1 回答
1471 浏览

c++ - 使用 -c 选项的 gcc 预编译头文件的奇怪行为

短篇故事:

我无法使用 gcc -c 选项使预编译的头文件正常工作。

很长的故事:

伙计们,我在 Linux 上使用 gcc-4.4.1,在一个非常大的项目中尝试预编译头文件之前,我决定在简单的程序上测试它们。他们“有点工作”,但我对结果不满意,我确信我的设置有问题。

首先,我编写了一个简单的程序(main.cpp)来测试它们是否有效:

然后我创建了预编译的头文件 pre.h(在同一目录中),如下所示:

...并编译它:

(创建了 pre.h.gch)

之后,我测量了使用和不使用预编译头文件的编译时间:

与 pch

没有 pch

到现在为止还挺好!快了将近 7 倍,令人印象深刻!现在让我们尝试一些更现实的东西。我所有的源代码都是用 -c 选项构建的,出于某种原因,我不能让 pch 很好地使用它。您可以通过以下步骤重现此...

我创建了测试模块 foo.cpp 如下:

以下是我尝试使用和不使用 pch 构建模块 foo.cpp 的时间:

与 pch

没有 pch

这很奇怪,看起来根本没有加速!(我跑了几次计时)。事实证明,在这种情况下根本没有使用预编译的头文件,我用 -H 选项检查了它(“g++ -I. -include pre.h -c foo.cpp -H”的输出没有列出 pre.h。完全没有gch)。

我究竟做错了什么?