构建系统
一. 构建系统
1.1 编译器(compile)与构建系统(build system)
编译器
在软件开发中,编译器负责将源代码文件转化为可执行的二进制代码文件的,也可以说是将源代码“翻译”为可执行文件。
比如我们经常用的gcc,基本步骤是预处理、编译、汇编、链接。最终生成可执行文件或者共享库,绝大多数编译器的工作都是类似的。
构建系统
构建系统是一组软件工具和实用程序的集合,旨在简化和自动化软件开发中的构建过程。它提供了一个框架,用于管理和协调构建软件项目中涉及的各种任务和步骤。 通常包括但不限于编译源代码、解决依赖关系、链接库、生成可执行文件或分发包以及执行其他构建相关任务的工具。如我们常见的有GNU Make、Ninja等。
由此可见,构建系统是包含编译器的。
尽管随着时间的推移,构建系统也在不断发展和改进,引入了更多的功能和特性,以满足不断变化的软件开发需求。比如,构建缓存、增量编译、并行构建等技术。 但他们的大多数核心算法自从Make首次使用有向无环图(DAG)来表示文件之间的依赖关系,并确定构建顺序以来并没有发生太大的变化。
1. 我们是否可以直接使用编译器而不是用构建系统?
对构建系统的需求可能不那么显而易见。大多数工程师在学习编码时不会使用构建系统。大多数工程师会先直接从命令行调用 gcc 等工具,或在集成开发环境 (IDE),如KEIL ECLIPS SES等中 中调用同类工具。只要所有源代码都位于同一目录中,就可以直接使用命令:
gcc -c file1.c -o file1.o
gcc -c file2.c -o fi