什么是CMake发生器?

bat*_*man 21 generator cmake

我看了文档.

它说:

A CMake Generator is responsible for writing the input files for a native build system. 
Run Code Online (Sandbox Code Playgroud)

这到底是什么意思呢?

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

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

为什么输入文件必须written由生成器存在?

jms*_*ker 23

什么是发电机?

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

那么什么是构建系统?

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

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

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

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

CMake的包括了许多Command-Line,IDEExtra发电机.

命令行构建工具生成器

这些生成器用于命令行构建工具,如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
  • 青山MULTI
  • Xcode中

额外的发电机

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

支持以下内容(**):

  • 代码块
  • CodeLite
  • Eclipse CDT4
  • KDevelop3
  • 凯特
  • 崇高文本2

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

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

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

通常,是的,但其他构建系统可以像忍者一样设置.

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

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

**根据CMake版本3.9 的文档

  • @NikolaLukic是的,只需运行“Cmake -h”,帮助输出将列出哪些生成器可用。 (2认同)

小智 15

也许一张照片值一千字。

cmake底层

这个问题也让我疑惑了一阵子,才让我来到这里。我搜索了一些信息,并根据我的知识制作了这张照片。如果图片有任何错误,请纠正我,以免误导。


Ada*_*rek 5

CMake 生成器负责为本机构建系统编写输入文件。

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

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