标签: precompiled-headers

预编译的标题?我们真的需要它们吗?

很久以前我曾经使用过预编译的头文件:a.加快编译速度和b.因为我支持多种开发工具,如CodeWarrior,MPW,VS,ProjectBuilder,gcc,intel编译器等等.

现在我有一台带有32GB RAM的Mac Pro.

现在我只使用CMake.

那么我们真的需要预先编译的头文件吗?

我有没有看到/知道明显的好处?

如何制作跨平台的预编译头?也许这会简化我的生活.

c++ precompiled-headers c-preprocessor

12
推荐指数
2
解决办法
8630
查看次数

Visual Studio 2022 版本 17.6 中的预编译标头错误

我有一个 Visual Studio C++ 项目,最近将 Visual Studio 2022 从版本 17.5 更新到版本 17.6 后,编译从一开始就停止并出现错误:

1>------ Rebuild All started: Project: MRPch, Configuration: Debug x64 ------
1>Scanning sources for module dependencies...
1>std.compat.ixx
1>std.ixx
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\modules\std.compat.ixx : fatal  error C1083: Cannot open include file: 'MRPch.h': No such file or directory
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\modules\std.ixx : fatal  error C1083: Cannot open include file: 'MRPch.h': No such file or directory
1>C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(486,5): warning MSB8074: Cannot read Module Dependencies file C:\Work\MeshInspector\source\TempOutput\MRPch\x64\Debug\std.ixx.module.json: Expecting element …
Run Code Online (Sandbox Code Playgroud)

compiler-errors precompiled-headers visual-c++ visual-studio-2022

12
推荐指数
1
解决办法
2147
查看次数

为什么stdafx.h的运行方式如何呢?

像往常一样,当我的大脑弄乱我无法弄明白的东西时,我来找你们帮忙:)

这次我一直想知道为什么stdafx.h的运行方式如何?根据我的理解,它做了两件事:

  • 包括我们可能(?)使用的标准标题,这些标题 很少被更改
  • 当代码不再预编译时,作为编译器书签工作.

现在,这两件事对我来说似乎是两个非常不同的任务,我想知道为什么他们没有采取两个单独的步骤来照顾它们?对我来说,有一个#pragma-command做书签的东西,并且可选地有一个标题文件,使用一长串的windows.h来做包括经常使用的标题......这样的事情似乎是合理的.这将我带到了我的下一个point:为什么我们被迫通过stdafx.h包含经常使用的头文件?就个人而言,我不知道我使用的任何常用标题我还没有自己的包含 - 但也许这些标题是.dll生成所必需的?

Thx提前

c++ precompiled-headers stdafx.h visual-studio

11
推荐指数
2
解决办法
4557
查看次数

如何使clang -E省略预编译头

PrecompiledHeader.h:

#include "stdio.h"
Run Code Online (Sandbox Code Playgroud)

main.cpp中:

#include "PrecompiledHeader.h"
#include "stdio.h"

int main()
{
   return 123;
}
Run Code Online (Sandbox Code Playgroud)

创建预编译头:

clang -x c++-header PrecompiledHeader.h -o PrecompiledHeader.pch
Run Code Online (Sandbox Code Playgroud)

在main.cpp上运行clang预处理器:

clang main.cpp -include-pch PrecompiledHeader.pch -E 
Run Code Online (Sandbox Code Playgroud)

这当前输出许多页输出(stdio.h).但是,我想得到的只是main函数,并且从输出中省略了PrecompiledHeader.h的内容.

有没有办法让clang这样做?(如果有人知道visualstudio的cl.exe同样问题的答案,我也很想知道:)

c++ clang precompiled-headers

11
推荐指数
1
解决办法
732
查看次数

有没有办法在VC++中使用预编译的头文件而不需要stdafx.h?

我有一堆遗留代码,我需要编写单元测试.它在任何地方使用预编译的头文件,因此几乎所有.cpp文件都依赖于stdafx.h,这使得为了编写测试而难以破坏依赖性.

我的第一直觉是删除所有这些stdafx.h文件,这些文件大部分都包含#include指令,并根据需要将这些#includes直接放在源文件中.

这将使得必须关闭预编译的头文件,因为它们依赖于像stdafx.h这样的文件来确定预编译头文件的停止位置.

有没有办法保留没有stdafx.h依赖项的预编译头文件?有没有更好的方法来解决这个问题?

c++ dependencies unit-testing precompiled-headers stdafx.h

10
推荐指数
1
解决办法
6463
查看次数

在调试模式下尝试使用VS2010(VC100)的预编译头时,如何消除C2859错误?

我正在尝试升级旧解决方案以使用VS2010(VC100).

我有它的设置,以便stdafx.cpp将从stdafx.h创建一个预编译的头stdafx.pch.然后指示包含stdafx.h的所有其他.cpp文件使用预编译头.

这些帖子帮助我做到了这一点:

现在,当我在发布模式下构建时,一切都很好.但是,当我尝试在调试模式下构建时,我得到了一大堆错误:

错误1错误C2859:[已删除]\debug\vc100.idb不是创建此预编译头时使用的idb文件,请重新创建预编译头.

我相信这个.idb文件是Visual Studio创建的中间调试文件.

为什么我收到此错误?换句话说,为什么它在创建预编译头时不使用此.idb文件?

我不确定您需要什么进一步的信息才能给我回答,所以请问我是否需要提供更多信息.

debugging visual-studio-2010 precompiled-headers visual-c++

10
推荐指数
2
解决办法
8946
查看次数

在多个文件中使用时,没有参数的#pragma hdrstop会怎么做?

#pragma hdrstop在几个源(cpp)文件中放入(无文件名参数)的实际价值("它做什么")是什么?

请注意,MSDN文档(再一次)对我来说一样清楚.

编辑/注意:我问这个,因为这个答案和它链接的文章似乎建议.但我不明白为每个编译单元分别有一个pch文件有什么好处.

c++ precompiled-headers visual-c++

10
推荐指数
2
解决办法
6979
查看次数

使用Autotools预编译的头文件

是否可以在使用automake/libtool的项目中使用gcc预编译头文件?

添加新的make规则来构建预编译头文件并不困难.问题是你还必须添加由libtool和AFAIK引入的编译标志,它无法处理标头输入文件.

你怎么能这样做?

automake autoconf autotools precompiled-headers libtool

9
推荐指数
1
解决办法
1959
查看次数

带有DLL解决方案的预编译头文件.无法打开预编译的头文件

当此解决方案使用.lib文件而不是.dll文件时,这没有错误.

我有我的所有项目,除了一个当前使用预编译头,没有错误.预编译的头文件名为" LudoGlobal.h ".我试图将最后一个项目链接到这个预编译的头文件(它存在于一个单独的"Core"项目中),但是我收到以下错误:

错误4致命错误C1083:无法打开预编译的头文件:'....\Output\LudoSound\Debug\LudoSound.pch':没有这样的文件或目录ludosoundmanager.cpp 1

对于每个.cpp文件.为什么是这样?我该如何解决?

我意识到LudoSound.pch不存在.我假设它可能是在LudoSound编译时创建的,是吗?

c++ dll visual-studio-2005 precompiled-headers

9
推荐指数
1
解决办法
2万
查看次数

gcc 预编译头文件:主文件中的 pragma once

我创建了一个头文件。一些简单的如下。

#pragma once

#include <iostream>

template<typename T>
void say(T t) {
    std::cout << t << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

然后用于g++创建gch带有g++ hello.h. 它给了我这个警告->

pch.h:2:9: warning: #pragma once in main file
    2 | #pragma once
      |         ^~~~
Run Code Online (Sandbox Code Playgroud)

但是gch创建的文件和预编译的头文件工作正常。如果我使用标题守卫,这个错误就会消失。

我在这里做错了吗?

c++ g++ pragma precompiled-headers

9
推荐指数
1
解决办法
2994
查看次数