`
iunknown
  • 浏览: 404069 次
社区版块
存档分类
最新评论

自动化解决编译依赖问题

阅读更多
一个用 c++ 实现的系统,过于庞大,依赖很复杂,还要变化很频繁。原来靠手工维护 Makefile 里面的 link 和 incl ,经常都会因为一个底层模块的调整导致大规模的编译错误。后来把依赖关系整理到一个统一的文件中,每次编译的时候,从文件中读取依赖关系,实时计算 link 和 incl ,这样解决了上面的问题。

不过好景不长,由于写代码的人太多,最近搞了好几个循环依赖的东西出来。原来实时计算 link 和 incl 的代码有一些问题,导致计算一次需要耗时 5~10 分钟。直接的后果就是写完一段代码,然后敲一个 make ,接着去倒杯水,喝完回来,还没看到可执行程序。

仔细回忆了数据结构课程中的内容,发现这个问题其实是有标准算法的。这是一个拓扑排序问题,但是输入不是一个标准的有向无环图,而是一个带强连通分量的有向图。

已经有现成的算法来解决
http://en.wikipedia.org/wiki/Strongly_connected_components

用 python 重写了计算依赖关系的代码,现在的用时基本不可见了,在 0.01 秒以下。

0
0
分享到:
评论

相关推荐

    GNU Make自动化编译工具-编译静态库与动态库 示例makefile.zip

    很早之前深谙自动化编译的重要,只是一直没有机会写一篇相关的文章,这次真的是巧遇了,@亦楠 同学在《headfirst》实验中遇到自动化编译问题,正好可以切题。 自动化编译工具的基本思想就是通过设置一系列依赖关系...

    GradleAndroid最新自动化编译脚本教程

    上面这句话我觉得写得很官方,大家只需知道Gradle可以用来android开发中进行多个项目依赖的自动化编译脚本,知道这点也就知道我们使用它的目的;为什么不使用Ant做自动化编译脚本,因为ant上手快,但是维护起来太不...

    java打包后jar包反编译工具

    另外,构建工具还可以自动化执行其他任务,如运行测试、生成文档等,进一步提升开发流程的效率。 二、模块化开发 将大型项目拆分成多个独立的模块,每个模块只包含相关的功能和代码。这样,在修改某个模块的代码时...

    GDA3.98不依赖java且支持反编译apk、dex、odex、oat、jar、aar、class, 支持python

    GDA不仅只是反编译器,同时也是一款轻便且功能强大的综合性逆向分析利器,其不依赖java且支持apk、dex、odex、oat、jar、aar、class文件的反编译, 支持python,java脚本自动化分析。GDA提供了字符串、方法、类和...

    这是一个 keil 的编译信息展示增强工具,支持芯片存储器的可视化展示,轻量且无任何依赖

    这是一个 keil 的编译信息展示增强工具,支持芯片存储器的可视化展示,轻量且无任何依赖。具备以下功能:解析参与编译的每个文件对 RAM 和 flash 的占用情况。自动忽略不被包含进编译的文件。自动检索被 keil 改名的...

    程序设计语言编译原理 (陈火旺)

    编译原理经典教材 目录 第一章引论 1.1什么叫编译程序 1.2编译过程概述 1.3编译程序的结构 1.3.1编译程序总框 ... 12.4依赖关系问题 12.5依赖关系测试 12.6循环的向量化与并行化 12.7循环变换技术 练 习

    GCC for AIX7.1及依赖rpm包

    aix 7.1最小化安装的操作系统安装gcc,gcc-c++等编译环境的rpm安装包和依赖包,亲测在两台aix7.1小型机上编译nginx 1.12成功

    cmake工程标准编译框架

    这个CMake工程标准编译框架是一个用于管理C++项目的自动化构建系统,它包括一个主的CMakeLists.txt文件和一个辅助的CMakeLists.txt文件,通过使用Bash脚本来协调它们的工作。主CMakeLists.txt文件定义了项目的源代码...

    uniapp微信小程序电商源码前后端均未编译

    基于Yii2开发,支持composer,优化核心,减少依赖,基于全新的架构思想和命名空间 基于命名空间和PSR-4规范,加入PHP7新特性 核心功能模块化,方便开发和维护 强化路由功能,采用RESTful接口标准 灵活创建模型...

    基于Java+GitLab+Jenkins与Docker的自动化考试系统后端源码.zip

    基于GitLab+Jenkins与Docker的自动化考试系统后端源码.zip 特性 [x] 使用通用的Git协议 [x] 自动化测试,实时展示成绩 [x] 完全隐藏GitLab和Jenkins [x] Docker中运行测试,隔离网络 [x] CPU、内存资源限制 [ ] LDAP...

    Maven功能介绍以及安装配置详解

    自动化构建:通过简单的命令行指令,Maven可以自动化地完成编译、测试、打包等任务。此外,它还支持插件机制,可以方便地扩展其功能。 项目报告和文档:Maven可以生成各种项目报告和文档,如代码覆盖率报告、单元...

    基于spring-boot实现自动化配置的支付对接.zip

    支持项目创建、组织、构建自动化以及依赖管理,确保不同模块和组件之间的协调一致。 编译与构建: 包括编译器、构建工具(如Make、Gradle、Maven)等,用于将源代码转换为可执行文件或库,并进行资源打包、优化...

    Go的编译时依赖注入-Golang开发

    Wire:Go Wire中的自动初始化是一种代码生成工具,可使用依赖注入自动连接组件。 组件之间的依赖关系在Wire中表示为功能参数,这鼓励使用Wire:Go Wire中的自动初始化是一种代码生成工具,可使用依赖注入自动连接...

    exceptional c++:47个c++工程难题、编程问题和解决方案(英文版)

    《exceptional c++:47个c++工程难题、编程问题和解决方案(中文版)》讲述如何用标准c++进行企业级的软件开发,通过“问题/解答”的方式,启发读者思考,帮助了解隐藏在问题背后的设计思想,以及各种编程指导原则适用...

    AIS:All-end Integrated Solution 全端集成解决方案 Auto Integrated Solution 自动化集成解决方案 AIS 爱SCRIPT

    ######自动化构建流程(预编译静态资源(html、css、js)压缩、合并、雪碧图生成、代码检查,JS依赖关系管理,国标化、css parser、cssshrink、uncss、critical……) ######集成远程调试工具,可以自动添加调试

    Maven介绍安装和配置详解

    3. **自动化构建**:通过简单的命令行指令,Maven可以自动化地完成编译、测试、打包等任务。此外,它还支持插件机制,可以方便地扩展其功能。 4. **项目报告和文档**:Maven可以生成各种项目报告和文档,如代码覆盖...

    自动化的智能Build脚本(Smart Makefile)

    智能自动化Makefile可以完成如下工作: *自动获去操作系统类型并指定为全局编译选项(-DYOUR_OS_NAME) *自动出来源代码文件之间的依赖关系 *使用colorgcc可以彩色显示警告和错误信息 *智能控制debug和release版本的...

    wire:Go的编译时依赖注入

    组件之间的依赖关系在Wire中表示为函数参数,鼓励显式初始化而不是全局变量。 因为Wire在运行时没有运行时状态或反射,所以编写用于Wire的代码甚至对于手写初始化也是有用的。 有关概述,请参见。 正在安装 通过...

Global site tag (gtag.js) - Google Analytics