我的全栈学习之旅:Colcon, CMake, Ninja/Make,编译器之间的关系
从下往上:
编译器:
编译器(包括链接器等)是将源代码(C/C++)编译汇编成目标文件,然后链接成可执行文件或者库。
Ninja/Make:
Ninja/Make是一种构建系统执行器,分别通过build.ninja/Makefile文件,决定什么时候,并执行哪些编译指令(即根据这些文件中规定的编译规则,调用编译器完成编译)。
Ninja/Make本身不执行编译过程,它们是通过调用底层的编译器来完成编译过程。
编译器本身并不知道什么时候需要做什么,它们只听显性调用。
CMake:
CMake是一种构建系统生成器,下层的构建系统执行器Ninja/Make分别需要build.ninja和Makefile来指导它们如何执行编译指令。像build.ninja和Makefile这样的文件则是由CMake通过一系列的cmake文件生成出来(即生成了编译规则)。Ninja/Make本身是不知道针对某一个工程,如何进行编译。
Colcon:
Colcon是一个面向多包工程的命令行构建工具,它支持使用多种像CMake这样的构建系统生成器,可以通过一个指令“colcon build”实现多种构建方式。
Colcon和CMake的关系是Colcon调用CMake。