编译系统的对比和说明1

  • 手写MakeFile: 适合于小型项目编译。当项目中模块众多并且之间依赖关系复杂时,维护Makefile非常困难。

  • Modern CMake: 开源社区非常流行的build system generator,通过执行CMakeLists生成makefile/ninja等,构建C++项目。尤其是2013年以来Modern CMake的发展,理念是:一切皆为target or target property。Modern CMake通过target之间的依赖关系,实现target属性(头文件查找路径、编译选项、链接依赖)内部隐藏或者自动传递,可以非常方便地处理大型C++项目的复杂依赖关系。

    相比于makefile,Modern CMake大大解放了C/C++研发人员的生产力。

  • Bazel (and Blade): Bazel是Google开源的编译构建工具,以Monolithic Repository为理念。与makefile & CMake不同,Bazel另起炉灶,采用client/server运行模式,为云编译而生。Bazel工具将编译过程分三个阶段:Load Phase/Analysis Phase/Execution phase。研发人员实现workspace/build/.bzl三种文件,Bazel执行这些文件生成action graph,执行action来构建项目。

阅读全文 »
0%