可以使用哪些技术来加速C++编译时间?
这个问题出现在Stack Overflow问题C++编程风格的一些评论中,我很想知道它有什么想法.
我见过一个相关的问题,为什么C++编译需要这么长时间?,但这并没有提供很多解决方案.
我最近有理由使用常规的Debug和Release配置来处理一些Visual Studio C++项目,还有'Release All'和'Debug All',这是我以前从未见过的.
事实证明,项目的作者有一个ALL.cpp,其中#includes所有其他.cpp文件.*所有配置只构建一个ALL.cpp文件.它当然被排除在常规配置之外,并且常规配置不构建ALL.cpp
我只是想知道这是否是一种常见做法?它带来了什么好处?(我的第一反应是闻起来很糟糕.)
您可能会遇到哪些陷阱?我能想到的是,如果你的.cpps中有匿名命名空间,它们不再是那个cpp'私有',但现在也可以在其他cpps中看到了吗?
所有项目都构建了DLL,因此在匿名命名空间中存储数据不是一个好主意,对吧?但功能会好吗?
干杯.
我们有相当大的C++应用程序,它由Visual Studio 2005中的大约60个项目组成.目前在Release模式下链接需要7分钟,我想尝试减少时间.有没有改善链接时间的提示?
大多数项目都编译为静态库,这使得测试更容易,因为每个项目都有一组相关的单元测试.似乎静态库的使用阻止VS2005使用增量链接,因此即使打开增量链接,它也会每次都进行完整链接.
将DLL用于子项目会有什么不同吗?我真的不想通过所有的标题和添加宏来导出符号(甚至使用脚本),但如果它会做一些事情来减少7分钟的链接时间,我一定会考虑它.
出于某种原因,使用命令行中的nmake稍快一些,并且在Linux(使用GCC)上链接相同的应用程序要快得多.
我阅读了MSDN中的文档,但最后我并没有清楚地知道它们之间的实际区别是什么.两者似乎都要求在每个*.cpp文件的顶部添加stdafx.h.
我正在使用VS2008.
任何人都可以帮忙清理一下吗?
c++ precompiled-headers compiler-options visual-studio-2008 visual-studio
能否请您建议如何加快编译,加载大解决方案(约50个项目).我的意思是只有VS 2012工作室或Windows设置,而不是硬件更改.
谢谢
John Lakos 将此问题称为编译时耦合的潜在根源(他的简介中的图 0-3):
我面临的问题是编译了太多文件,因为对单个枚举存在物理依赖性。
我有一个带有枚举定义的标头:
// version.h
enum Version {
v1 = 1,
v2, v3, v4, v5, ... v100
};
Run Code Online (Sandbox Code Playgroud)
这被数百个文件使用。每个文件定义一类对象,必须使用该read()函数从磁盘读取这些对象。Version用于确定读取数据的方式。
每次引入新的类或类成员时,都会将新条目附加到枚举中
// typeA.cpp
#include "version.h"
void read (FILE *f, ObjectA *p, Version v)
{
read_float(f, &p->x);
read_float(f, &p->y);
if (v >= v100) {
read_float(f, &p->z); // after v100 ObjectA becomes a 3D
}
}
Run Code Online (Sandbox Code Playgroud)
和
// typeB.cpp
#include "version.h"
void read (FILE *f, ObjectB *p, Version v)
{
read_float (f, &p->mass);
if …Run Code Online (Sandbox Code Playgroud)