performance - Environment.Clone 窃取启动时间

标签 performance build environment scons

我们已经将大型 GNU Make 构建系统转换为 SCons。

一切运行良好,只是我们在 Environment.Clone() 中花费了 7 秒的启动时间。我们使用 Clone() 因为它的功能风格很好,不会修改现有的全局状态。

有没有人想出一种方法来复制 99% 的环境数据,并且在克隆中永远不会改变 无论如何?

删除字典中未使用的键会缩短 Clone() 时间吗?

最佳答案

根据您的意见,您可以考虑将构建划分为几个较小的构建,每个构建都由其单独的 SConstruct 构建脚本控制,同时维护完整构建的当前 SConstruct。我可以想象,更改 C++ 代码的开发人员只需要构建一次完整的项目即可获得非 C++ 依赖项。然后,在处理 C++ 功能时,他/她只需要构建 C++。 ada 和 fortran 也是如此。

例如,假设您有类似于以下目录结构的内容:

root_dir
|
+--- src_ada
|
+--- src_cpp
|
+--- src_fortran

您可以为每种类型的构建拥有一个根级别 SConstruct,如下所示:

SConstruct             # performs a complete build
SConstruct.ada         # builds just the ada
SConstruct.cpp         # builds just the cpp
SConstruct.fortran     # builds just the fortran

如果正确创建了这些 SConstruct 脚本,则可能不需要修改辅助 SConscript 构建脚本。

您甚至可以通过创建一个可以采用以下命令行参数的构建包装脚本来更进一步:

build [complete (default arg) | ada | cpp | fortran]

在内部,脚本将使用适当的 SConstruct 调用 scons,该 SConstruct 可能是以下之一:

scons -f SConstruct
scons -f SConstruct.ada
scons -f SConstruct.cpp
scons -f SConstruct.fortran

注意选项 -f file、--file=file、--makefile=file、--sconstruct=file 都具有相同的作用:让您指定用于构建的 SConstruct,如 SCons man pages 中所述.

关于performance - Environment.Clone 窃取启动时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22866893/

相关文章:

c - 什么时候使用哈希数据结构?

ruby-on-rails - Namecheap 服务器上的 Rails 问题

maven - 如何使用maven签署jar,但更改jdk?

android - 使用 ant 脚本构建 apk。

c++ - 将CMake构建的库链接到预构建的目标文件

r - 使用包中的评估调用包装 data.table

variables - 带有更新路径的 Ansible 运行命令

c# - 避免在 DbParameter.Value 中装箱?

c++警报计时器,CPU负载很小

performance - 德尔福性能: Case Versus If