相关疑难解决方法(0)

可以使用哪些技术来加速C++编译时间?

可以使用哪些技术来加速C++编译时间?

这个问题出现在Stack Overflow问题C++编程风格的一些评论中,我很想知道它有什么想法.

我见过一个相关的问题,为什么C++编译需要这么长时间?,但这并没有提供很多解决方案.


这里投票有Visual Studio支持共享项目之间的预编译头

c++

239
推荐指数
17
解决办法
10万
查看次数

#include所有.cpp文件到一个编译单元?

我最近有理由使用常规的Debug和Release配置来处理一些Visual Studio C++项目,还有'Release All'和'Debug All',这是我以前从未见过的.

事实证明,项目的作者有一个ALL.cpp,其中#includes所有其他.cpp文件.*所有配置只构建一个ALL.cpp文件.它当然被排除在常规配置之外,并且常规配置不构建ALL.cpp

我只是想知道这是否是一种常见做法?它带来了什么好处?(我的第一反应是闻起来很糟糕.)

您可能会遇到哪些陷阱?我能想到的是,如果你的.cpps中有匿名命名空间,它们不再是那个cpp'私有',但现在也可以在其他cpps中看到了吗?

所有项目都构建了DLL,因此在匿名命名空间中存储数据不是一个好主意,对吧?但功能会好吗?

干杯.

c++ build-process build visual-studio

71
推荐指数
3
解决办法
2万
查看次数

如何在VS2005中提高大型C++应用程序的链接性能

我们有相当大的C++应用程序,它由Visual Studio 2005中的大约60个项目组成.目前在Release模式下链接需要7分钟,我想尝试减少时间.有没有改善链接时间的提示?

大多数项目都编译为静态库,这使得测试更容易,因为每个项目都有一组相关的单元测试.似乎静态库的使用阻止VS2005使用增量链接,因此即使打开增量链接,它也会每次都进行完整链接.

将DLL用于子项目会有什么不同吗?我真的不想通过所有的标题和添加宏来导出符号(甚至使用脚本),但如果它会做一些事情来减少7分钟的链接时间,我一定会考虑它.

出于某种原因,使用命令行中的nmake稍快一些,并且在Linux(使用GCC)上链接相同的应用程序要快得多.

  • Visual Studio IDE 7分钟
  • Visual C++使用命令行中的nmake - 5分钟
  • Linux上的GCC 34秒

c++ visual-studio-2005

24
推荐指数
3
解决办法
1万
查看次数

在Visual Studio中"创建预编译头"(/ Yc)和"使用预编译头"(/ Yu)之间有什么区别?

我阅读了MSDN中的文档,但最后我并没有清楚地知道它们之间的实际区别是什么.两者似乎都要求在每个*.cpp文件的顶部添加stdafx.h.

我正在使用VS2008.

任何人都可以帮忙清理一下吗?

c++ precompiled-headers compiler-options visual-studio-2008 visual-studio

16
推荐指数
2
解决办法
5251
查看次数

Visual Studio 2012速度大解决方案

能否请您建议如何加快编译,加载大解决方案(约50个项目).我的意思是只有VS 2012工作室或Windows设置,而不是硬件更改.

谢谢

visual-studio-2012

7
推荐指数
2
解决办法
8791
查看次数

标头中的枚举会导致过多的重新编译

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)

c c++

5
推荐指数
1
解决办法
251
查看次数

产品减少c ++编译时间?

是否有任何产品可以减少c ++构建时间?那可以和msvc一起使用吗?

c++ compile-time

3
推荐指数
2
解决办法
922
查看次数