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

自动化解决编译依赖问题

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

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

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

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

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

0
0
分享到:
评论

相关推荐

    解决间接编译依赖的makefile

    在软件开发过程中,Makefile是不可或缺的工具,它定义了项目的构建规则,使得编译过程自动化。"解决间接编译依赖的makefile"这个主题旨在介绍如何通过优化Makefile来处理复杂的编译依赖关系,特别是在C++项目中,...

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

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

    WEB项目自动化编译文件

    "WEB项目自动化编译文件"指的是用于自动执行构建过程的配置文件和脚本,它们通常包括了一系列的任务,如源代码的编译、资源文件的处理、依赖库的管理、测试的执行以及最终产品的打包等。在提供的文件名中,`build....

    ant编译依赖包

    Ant是Apache软件基金会的一个开源项目,它是一个基于Java的构建工具,主要用于自动化Java项目的构建、编译、测试和部署过程。在Java开发中,Ant以其灵活性和可扩展性而受到广泛应用,尤其在处理复杂的构建任务时。本...

    jenkins、node、git、docker自动化编译

    jenkins、node、git、docker自动化编译 jenkins 是一个开源的自动化服务器,可以用于自动化编译、测试、部署和发布软件。Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行环境,常用于开发服务器端...

    ipxe编译依赖lzma头文件

    通过以上步骤,你应该能够成功解决“ipxe编译依赖lzma头文件”的问题,顺利编译出支持LZMA压缩的IPXE引导程序。在实际操作过程中,遇到任何问题,都可以参考相关的技术论坛或官方文档寻求帮助。理解并掌握这些知识点...

    doris-1.1.3源码编译broker-maven依赖包repository

    Maven 是一个项目管理和综合工具,用于自动化构建、依赖管理和项目信息管理。在Doris中,Maven 负责管理项目的构建过程,确保所有依赖项正确无误地被引入。在编译Doris源码时,Maven的`pom.xml`文件是关键,它定义了...

    ffmpeg在osx下编译依赖包全

    在macOS环境下,可能还需要安装Xcode开发工具和Homebrew包管理器,以简化和自动化编译过程。 在"ffmpeg_packages"这个压缩包中,应该包含了上述所有依赖库的源代码和其他必要的构建文件。用户在解压后,需要按照...

    hadoop2.6.5自动化编译

    本文将详细讲解如何在CentOS7.0环境下,使用Hadoop2.6.5版本进行自动化编译,确保你具备运行Java 1.8环境。首先,我们需要理解Hadoop的基本概念及其重要性。 Hadoop是Apache软件基金会开发的一个分布式计算框架,...

    编译tomcat依赖的包

    2. Apache Ant:Ant是Java的一个构建工具,用于自动化构建过程,如编译、打包和测试。下载并安装Ant,并将其添加到系统的PATH环境变量中。 3. Git:如果Tomcat的源代码是从GitHub或其他版本控制系统获取的,那么Git...

    Qt5自动配置编译环境

    在本例中,我们有`autoconf.bat`这个批处理文件,它是一个自动化脚本,用于设置编译环境并执行必要的配置步骤。运行这个脚本可以自动配置所需的编译工具链,如MinGW或Visual Studio,以及相关的库和依赖项。 在开始...

    基于反编译技术的Android应用自动化测试方案.pdf

    鉴于此,本文提出了一种基于反编译技术的Android应用自动化测试方案。 反编译技术是将编译后的程序代码转换回其原始源代码的过程。在Android开发中,APK文件是应用程序的打包形式,通过反编译技术可以将APK中的DEX...

    iOS自动编译工具

    在iOS开发过程中,自动化编译和打包是提高效率的关键步骤。"iOS自动编译工具"是一种利用Python编写的脚本,旨在简化iOS应用的构建和发布流程,特别是将其上传到蒲公英(iHoe)这样的第三方分发平台。蒲公英是一个...

    自动化编译工具scons简介

    **自动化编译工具SCons详解** SCons是一个开源的、基于Python的自动化构建工具,它在软件构建领域提供了一种高效、跨平台的解决方案。SCons的设计理念是简化构建过程,提高开发效率,并且能够更好地适应不断变化的...

    tomcat编译依赖Jar

    Tomcat的构建过程通常使用Ant脚本来自动化,因此`ant.jar`是必不可少的。 3. **Apache Maven依赖**:虽然Ant是主要的构建工具,但在某些场景下,Maven也可能被用来管理依赖关系和构建过程。相关的.jar文件包括`...

    适用于TexLive的自动化学报Latex模板

    ".latexmkrc"是LaTeXmk的配置文件,LaTeXmk是一个自动化工具,可以自动编译、处理依赖关系以及多次运行LaTeX以解决跨引用等问题。"template.pdf"应该是使用这个模板编译出的示例PDF文件,用户可以查看最终效果。...

    opencv各版本编译自动化脚本

    **自动化编译脚本的重要性** 手动编译OpenCV通常涉及多个步骤,包括下载源代码、配置编译选项、解决依赖关系、编译和安装等,这一过程对于开发者来说既耗时又容易出错。因此,使用自动化脚本可以显著提高效率,降低...

    App自动化之使用Ant编译项目多渠道打包

    要进行自动化编译,首先确保你的项目结构清晰,如上述例子所示,包含一个基础Android Library(baseworld)和多个Android Project(floworld、healthworld、speciality和starworld)。每个项目都有自己的源码、资源...

    rabbitmq编译安装erlang的所需要的依赖rpm包

    2. **GNU Make**:这是一个自动化构建工具,用于协调编译过程。确保系统已安装make命令,它是构建软件的必备工具。 3. **C库和开发工具**:如`glibc`和`ncurses`等,这些是Erlang编译过程中需要用到的基本库及其...

    跨平台软件自动化编译及监控系统设计与实现.rar

    跨平台软件自动化编译及监控系统是现代软件开发流程中的重要组成部分,它旨在提升软件开发效率,确保代码质量,并提供实时的编译和部署状态反馈。这个系统的设计和实现涉及多个关键技术领域,包括构建工具、持续集成...

Global site tag (gtag.js) - Google Analytics