什么是CMake发生器?

时间:2014-09-19 19:58:24

标签: cmake generator

我阅读了文档。

它说:

A CMake Generator is responsible for writing the input files for a native build system. 

究竟是什么意思?

如果我的项目中有一组C ++文件,这些是输入文件吗?

如果我使用Linux,默认情况下我的本机构建系统是什么? Make

如果输入文件已经存在,为什么输入文件必须是written

4 个答案:

答案 0 :(得分:18)

什么是发电机?

要了解生成器是什么,我们首先需要了解什么是构建系统。 CMake不编译或链接任何源文件。它使用生成器为构建系统创建配置文件。构建系统使用这些文件来编译和链接源代码文件。

那么什么是构建系统?

构建系统是一个广义的术语,它将一组用于编译和链接源代码的工具组合在一起,但它也可以包括构建过程中使用的辅助工具。

例如,在多阶段构建系统中,可以构建一个可执行文件以在另一个构建的构建过程中使用。

根据系统上使用的工具链,CMake将生成多个文件和文件夹,以允许构建 CMakeLists.txt 中引用的源文件并支持 .cmake 文件。

有时可能会在计算机上安装多个构建系统,例如Windows,您可以使用Visual Studio和MinGW构建系统。 CMake允许您指定哪些构建系统生成配置文件。

CMake包含许多Command-LineIDEExtra生成器。

命令行构建工具生成器

这些生成器用于命令行构建工具,如Make和Ninja。必须在使用CMake生成构建系统之前配置所选的工具链。

支持以下内容(**):

  • Borland Makefiles
  • MSYS Makefiles
  • MinGW Makefiles
  • NMake Makefiles
  • NMake Makefiles JOM
  • Unix Makefiles
  • Watcom WMake

IDE构建工具生成器

这些生成器适用于包含自己的编译器的集成开发环境。示例是Visual Studio和Xcode,它们本身包含一个编译器。

支持以下内容(**):

  • Visual Studio 6
  • Visual Studio 7
  • Visual Studio 7 .NET 2003
  • Visual Studio 8 2005
  • Visual Studio 9 2008
  • Visual Studio 10 2010
  • Visual Studio 11 2012
  • Visual Studio 12 2013
  • Visual Studio 14 2015
  • Visual Studio 15 2017
  • Green Hills MULTI
  • 的Xcode

额外发电机

这些是生成器创建配置以使用备用IDE工具,并且必须包含在IDE或命令行生成器中。

支持以下内容(**):

  • 码块
  • CodeLite
  • Eclipse CDT4
  • KDevelop3
  • 凯特
  • Sublime Text 2
  

如果我的项目中有一组C ++文件,这些是输入文件吗?

是的,它们是输入文件的部分。对于make build系统,您还有一个MakeFile。对于Visual Studio,您有一个解决方案文件(.sln)。对于这两个系统,CMake需要额外的文件才能知道如何创建给定的CMakeLists.txt文件。

  

如果我使用Linux,默认情况下我的本机构建系统是什么?使?

通常,是的,但其他构建系统可以设置为Ninja。

  

为什么输入文件必须由生成器写入?如果它们已经存在?

某些源文件可能已存在,但CMake可以生成标头和源文件。同样如上所述,必须生成依赖于CMakeLists.txt文件中提供的源文件的配置文件。

**根据CMake版本3.9的documentation

答案 1 :(得分:3)

也许一张照片值一千个字。

cmake-underlying

这个问题也使我困惑了一段时间,这使我来到了这里。我搜索了一些信息,并根据我的知识制作了这张照片。如果图片中有任何错误,请纠正我,以免引起误解。

答案 2 :(得分:2)

  

CMake Generator负责编写a的输入文件   本机构建系统。

表示当没有指定生成器时,CMake为本机构建系统准备构建脚本。在Linux中,默认构建系统为Make,其输入文件为makefiles,然后对其进行解释,并相应地执行构建。在第一次执行CMake构建脚本之前不存在。

C ++源文件(或任何其他源文件)不是构建系统的输入文件。构建系统脚本指定如何处理源文件以生成二进制可执行文件。

答案 3 :(得分:0)

据我所知,Unix中的标准本机构建系统是" GNU make(gmake)"被称为" make"。 谷歌家伙还发布了一个名为" Ninja"的其他工具。