【发布时间】:2017-10-04 07:01:06
【问题描述】:
我目前正在尝试优化一个大型项目的构建速度,并考虑到以下几点:
- 构建速度是第一要务
- 生成的二进制文件大小不重要
信息:
- 环境:Visual Studio 2012(必需,因为我正在开发的软件)+ Windows 机器
- 构建时间:12 分钟(干净构建),1 分钟进行小更改,并且由于链接缓慢(这就是我要解决的问题),每一次的小更改都会导致 5-6 分钟。
- 项目中的自定义文件:大约。 2500(我需要使用的SDK除外,CAD系统的大SDK)
- 自定义文件中的代码行数:大约。 500000
- 我正在使用支持 CAD 的最新计算机(32GB RAM、>3GHz QuadCore、SSD)
想法:
- 使用预编译头文件 => 完成,但没有我想要的效果;在大多数情况下有助于加快编译时间,但时不时地并没有这样做
- 将项目拆分为库 => 不确定这是否有帮助
问题
我找不到任何关于使用库和构建速度的信息,但我认为如果我预编译库,链接器会更快。
- 这个假设是真的吗?
- 如果我创建一个包含核心功能的静态库,这会影响构建时间吗?或者链接器是否需要与当前一样长?
- 如果我创建一个动态库,这会影响构建时间吗?还是链接器会再次完全检查 dll 并需要相同的时间?
【问题讨论】:
-
它是特定于操作系统的(Windows DLL 与 Linux 上的共享库非常不同)。考虑使用一个好的build automation 工具,例如GNU make 或ninja。显示您的编译命令(或您的
Makefile)。详细介绍您的项目(有几百万行,它在做什么,它正在使用哪些库) -
添加了我的构建环境,我坚持使用旧的 VS 版本和 Windows 计算机
-
最好放一个 Windows 标签。 AFAIK Windows 没有共享库,而是 DLL(带有奇怪的链接方案)。你应该更多地了解你的项目(有多少源文件,多少百万行源代码)。 AFAIK
make也用于 Windows,您可以从它们的源代码构建 GNUmake或ninja并将它们与 Visual Studio 编译器一起使用,因为它们都是免费软件。 -
如果没有更多细节,这个问题仍然不清楚且过于宽泛。你可以阅读莱文的linkers and loaders 书;但我强烈建议使用良好的外部构建自动化工具(例如从其源代码编译的
ninja) -
添加了一些一般信息...不知道我还应该添加什么。这实际上是一个普遍的问题
标签: c++ windows performance dll libraries