我正在寻找创建预编译的头文件,以避免在项目的每个头中包含相同的调试和跟踪库.
我创建了一个名为-Prefix.pch的文件:
#ifdef __OBJC__
#import "Blah.h"
#import "Blarg.h"
#endif
Run Code Online (Sandbox Code Playgroud)
并将其添加到项目中.还有什么我应该做的,或者现在应该做些什么(假设我做了一个项目干净并重新编译)?
我是从移植大C++项目Visual Studio来GCC为Android.由于文件数量很多,编译时间是冰冷的.我想设置一个预编译的头文件,但我发现GCC文档令人困惑.
我有一个stdafx.h文件应该是预编译头的基础,这是所有.cpp源中的第一个包含文件.有人知道我需要添加什么Android.mk来使这项工作?
我阅读了MSDN中的文档,但最后我并没有清楚地知道它们之间的实际区别是什么.两者似乎都要求在每个*.cpp文件的顶部添加stdafx.h.
我正在使用VS2008.
任何人都可以帮忙清理一下吗?
c++ precompiled-headers compiler-options visual-studio-2008 visual-studio
更新:
在我的头文件中包含stdafx.h有什么影响?
我开始使用Linux/Eclipse CDT中的C++项目并将其导入Visual C++/Windows.
在Visual C++中,我开始使用预编译头来加速编译,并定义了stdafx.cpp和stdafx.h.
这是我的stdafx.h
#pragma once
#include <string>
#include <vector>
#include <map>
...
Run Code Online (Sandbox Code Playgroud)
和我的stdafx.cpp
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
在每个.h和.cpp文件中,我有以下内容:
#pragma once //if in a header file
#include "stdafx.h"
Run Code Online (Sandbox Code Playgroud)
对于发布和调试,我都有"创建预编译头(/ Yc)".它在调试模式下编译良好,但在发布模式下它保持报告
error LNK2005: ___@@_PchSym_@00@UfhvihUaszlaDUwlxfnvmghUnnlUhixUnnlPeDUnnlPeDUivovzhvUvmgrgbOlyq@ already defined in A.obj
Run Code Online (Sandbox Code Playgroud)
如果我同时切换到"使用预编译头",我会进入Debug和Release
fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么?
我有一个庞大的项目,大约有150,000个LOC的C++代码.建设时间约为15分钟.该项目由许多不同规模的子项目组成.
我为每个子项目构建了单独的预编译头,但是当我使用它们时,构建时间保持大致相同.似乎构建时间减少了5-10%,而不是更多.
绝对使用预编译的头文件,我使用-Winvalid-pch选项,我尝试使用编译-H器选项进行编译,我的预编译头文件在输出中出现'bang'符号,这意味着编译器能够使用预编译头文件.
我所有预编译的头文件都不是很大,每个文件大约有50Mb.我使用python脚本,在这里生成最常用的预编译头文件列表,所以我的预编译候选列表非常好.
是否有用于构建优化的免费/开源工具?标准make实用程序似乎无法测量不同目标的构建时间.我无法找到获取不同目标统计数据的方法make.我不是在谈论依赖性分析或者先进的东西.我只是想知道大部分时间浪费在哪些目标上.
此外,GCC似乎在处理预编译头文件方面效率很低.我无法让任何子项目构建速度明显更快,我得到的最大加速比例是20%,对于一个需要三分钟构建的项目.使用固态硬盘购买速度更快的机器似乎比使用GCC优化Linux上的构建时间更容易和更便宜.
我有一个名为stdafx.h的头文件,当然这个是预编译的.我已经读过我应该将这些文件包含到我的.cpp文件中,但是随后会出现一些这样的语句.
我应该将stdafx添加到我的标题或我的cpp中吗?我认为将它放入标题是一种好习惯,但我似乎不得不把它放入标题中.
例:
stdafx包含freeglut.
我的类头文件的属性为GLenum.
我应该将stdafx包含在班级的.h中吗?
我今天第一次遇到了预编译的标题.在改变我的生活之前.我无法相信编译我的C++代码可能会那么快.它现在很有意义..
无论如何,让我感到困惑的一件事是,从我到目前为止所读到的,预编译的头文件只应添加到源文件(cpp?).
在Visual Studio中,Project Properties-> C/C++ - > Advanced下有一个选项可以"强制包含文件".我将该编译器选项设置为stdafx.h.
这样做之后......我不再需要包含我添加到stdafx.h中的头文件,甚至包括我的头文件(源文件应该自动包含stdafx.h).这是预期的行为吗?
我找不到头文件/源文件之间区别的地方.
如果确实如此...但我担心这是VC++让你逃脱的另一个因素,但会在GCC中破裂.是的..它需要便携; 至少在GCC和VC++之间.
我正在使用Boost Program Options,用它来编译非常小的C++代码需要相当长的时间(10秒甚至更长).在没有boost库的情况下编译代码需要1秒钟.
知道如何使用boost库来增加编译/链接时间吗?它是跨平台的,所以我需要用Mac OS X/Linux/PC编译代码.
我在使用MinGW预编译头文件时遇到问题.编译器似乎找到了预编译的头文件,但cc1plus.exe在cc1plus.exe停止工作后立即崩溃.
我知道这可能与cc1plus.exe的低堆栈大小有关,所以我做了以下操作来增加它:
editbin cc1plus.exe /STACK 33554432
Run Code Online (Sandbox Code Playgroud)
我也试着无济于事:
editbin cc1plus.exe /STACK 32768k
Run Code Online (Sandbox Code Playgroud)
然而,这并没有解决它,因为每当我尝试编译我的应用程序时它仍然会崩溃.
顺便说一下,如果重要的话,我正在使用最新的MinGw(gcc v 4.6.2)和最新的Eclipse CDT.
我是否正确增加了cc1plus.exe的堆栈大小?有没有人有任何线索如何继续,因为我阅读了无数的文章和主题,但我现在有点想法.
g ++似乎找到并接受我的预编译头文件:
Building file: ../src/AdvancedOgreFramework.cpp
Invoking: GCC C++ Compiler
g++ -DHAVE_W32API_H -DNO_GCC_PRAGMA -I"C:\DevelopmentTools\workspaces\workspace_cpp
\MyGame\inc" -I"C:\docs\ogre3d\CEGUI\CEGUI-0.7.6\cegui\include\falagard" -I"C:\docs
\ogre3d\CEGUI\CEGUI-0.7.6\cegui\include\RendererModules\Ogre" -I"C:\docs\ogre3d\CEGUI
\CEGUI-0.7.6\cegui\include" -I"C:\docs\ogre3d\ogre1.8.0_mingw_sdk\OgreSDK_MinGW_v1-8-0
\include" -O0 -g3 -H -Wall -c -Winvalid-pch -MMD -MP -MF"src/AdvancedOgreFramework.d"
-MT"src/AdvancedOgreFramework.d" -o "src/AdvancedOgreFramework.o" "../src
/AdvancedOgreFramework.cpp"
! C:\DevelopmentTools\workspaces\workspace_cpp\MyGame\inc/Precompiled.h.gch
Run Code Online (Sandbox Code Playgroud)
这是我作为预构建make运行的makefile,用于生成我的.gch:
C_FLAGS = -O0 -g3 -Wall -c -MMD -MP
INC_PATH = -IC:/docs/ogre3d/ogre1.8.0_mingw_sdk/OgreSDK_MinGW_v1-8-0/include -IC:/docs
/ogre3d/CEGUI/CEGUI-0.7.6-mingw/cegui/include -IC:/docs/ogre3d/CEGUI/CEGUI-0.7.6-
mingw/cegui/include/RendererModules/Ogre -IC:/docs/ogre3d/CEGUI/CEGUI-0.7.6-mingw/cegui
/include/falagard
all: Precompiled.h.gch
@echo 'Finished precompiling headers....'
Precompiled.h.gch: Precompiled.h …Run Code Online (Sandbox Code Playgroud) 我有一个 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
c++ ×6
gcc ×3
visual-c++ ×3
android ×1
android-ndk ×1
boost ×1
gnu-make ×1
header ×1
header-files ×1
ios ×1
mingw ×1
stack-size ×1
stdafx.h ×1