问题标签 [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.
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 的顶部。现在项目工作文件是否使用预编译头文件。
这是应该如何完成的,还是有正确的方法?
谢谢你。
c++ - 如果 stdafx.h 中已包含特定标头 - 我是否需要(必须/应该)将其明确包含在 .cpp 文件中?
如果一个特定的头文件已经包含在 stdafx.h - 我是否需要(必须/应该)将它明确地包含在一个 .cpp 文件中(它已经包含了 stdafx.h)?
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 将多个项目指向同一个文件,并禁用并行构建以使其正常工作,则每个项目都会使用自己的符号不断增加
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 是否支持进行此类测试?
也许我可以用另一种方式实现我想要的?
xcode - 从 Xcode 项目中删除 Prefix.pch 文件可以吗?
Xcode 项目会自动生成 Prefix.pch 文件。当我删除此文件并尝试构建时,我收到构建错误,提示“ * _Prefix.pch”文件丢失。
- Prefix.pch 文件是用 Xcode 编译的必须文件吗?
- 如何在没有 Prefix.pch 文件的情况下构建?
c++ - Visual Studio 的预编译头文件包含什么?
问题涉及由 Visual Studio 编译器创建的 .pch 二进制文件的内容。它包含什么?它只是头文件的解析树,还是目标代码?
考虑这个例子:
在要预编译的集合中包含此标头会导致 vector<int> 的完整模板实例被编译并添加到 .pch 中吗?
提供更多背景信息;如果只预编译解析树,这意味着实例化模板的目标代码仍将在每个编译单元创建一次,从而增加编译和链接时间。因此,即使启用了预编译头文件,“统一构建”/减少编译单元仍然是减少构建时间的一个相关因素。
c++ - 预编译头文件:该做什么和不该做什么?
我知道预编译的标头用于加快编译速度,但是对于我应该在其中包含哪些文件有什么注意事项吗?例如,我有一个项目使用了很多 boost 库,所以我只在其中包含了 boost 头文件stdafx.h
(我使用的是 VS2008)。我也应该在其中包含每个标准头文件吗?即使我,例如,包括<vector>
但从不使用,这是否会增加我的可执行文件的大小std::vector
?在 stdafx.h 中包含我自己项目的头文件是不是一个坏主意?
precompiled-headers - 预编译头文件
什么是预编译头文件?它们什么时候使用?
c++ - 使用 boost 库时加快编译/链接时间
我正在使用Boost Program Options,用它编译非常小的 C++ 代码需要相当长的时间(10 秒甚至更多)。在没有 boost 库的情况下编译代码需要 1 秒。
知道如何使用 boost 库来提高编译/链接时间吗?它是跨平台的,所以我需要用 Mac OS X/Linux/PC 编译代码。
c++ - 预编译头文件和 ASLR 有什么问题?
我在几个预编译标头和地址空间布局随机化不兼容的站点上阅读它。是什么让它们不兼容?修复它需要什么?
我的问题与操作系统无关我听说这是带有 grsecurity 的 linux 和较新的 Windows 版本上的问题。(而且我不知道还有什么还有 ASLR。)