对于 cmake ,一直理解为项目构建工具,知道遇到 --build 才发现,cmake 还统一了各个平台的编译阶段。下面摘抄知乎上大神的理解:

简单说一下cmake项目构建过程:

1、首先,使用命令行:‘cmake <source tree>’,比如:cmake .. ,在你的构建目录(外部构建方式)下生成了项目文件 project files,官方文档中又叫 build tree / binary tree,这其中就包括,比如:Makefile,还有一些其他相关文件 / 目录 / 子目录。

2、其次,自然是对生成好的项目(project files)进行编译构建,使用到的就是你说的'cmake --build .'

3、最后,--build 后面的那个 ‘.’,指的是生成好的 build tree 的路径。一般来说,如果你明确知道,你的系统中使用的是哪种构建器(build generator), 比如:Unix Makefiles, 你完全可以直接使用 make 进行项目构建。对于这种 --build 的形式,多用于自动化脚本之中,或者 IDE 环境下。

注: <source tree>指的是源文件 + 顶层 CMakeLists 所在的路径,cmake .. 假设了路径在上一层。


作者:雨落惊风
链接:https://www.zhihu.com/question/63537567/answer/1723782096
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结来说,cmake 工作流程如下(当前目录为 CMakeLists.txt 所在的顶层目录):

1、构建项目

cmake . -Bbuild -G "Unix Makefiles"

2、编译项目

cmake --build build

在 linux 下就是执行 make 命令。 

3、说明 

-B        指定构建的项目文件所在的目录

-G        Generator 的意思,该语句可以设置 IDE,比如 Xcode

cmake 支持的 IDE 如下:

  • Borland Makefiles: 生成 Borland makefile。
  • MSYS Makefiles: 生成 MSYS makefile。

    生成的 makefile 用 use /bin/sh 作为它的 shell。在运行 CMake 的机器上需要安装msys。

  • MinGW Makefiles: 生成供 mingw32-make 使用的 make file。

    生成的 makefile 使用 cmd.exe 作为它的 shell。生成它们不需要 msys 或者 unix shell。

  • NMake Makefiles: 生成 NMake makefile。
  • NMake Makefiles JOM: 生成 JOM makefile。
  • Unix Makefiles: 生成标准的 UNIX makefile。

    在构建树上生成分层的 UNIX makefile。任何标准的 UNIX 风格的 make 程序都可以通过默认的 make 目标构建工程。生成的 makefile 也提供了 install 目标。

  • Visual Studio 10: 生成 Visual Studio 10 工程文件。
  • Visual Studio 10 Win64: 生成 Visual Studio 10 Win64 工程文件。
  • Visual Studio 6: 生成 Visual Studio 6 工程文件。
  • Visual Studio 7: 生成 Visual Studio .NET 2002 工程文件。
  • Visual Studio 7 .NET 2003: 生成 Visual Studio .NET 2003 工程文件。
  • Visual Studio 8 2005: 生成 Visual Studio .NET 2005 工程文件。
  • Visual Studio 8 2005 Win64: 生成 Visual Studio .NET 2005 Win64 工程文件。
  • Visual Studio 9 2008: 生成 Visual Studio 9 2008 工程文件。
  • Visual Studio 9 2008 Win64: 生成 Visual Studio 9 2008 Win64 工程文件。
  • Watcom WMake: 生成 Watcom WMake makefiles。
  • CodeBlocks - MinGW Makefiles: 生成 CodeBlock 工程文件。

    在顶层目录以及每层子目录下为 CodeBlocks 生成工程文件,生成的 CMakeList.txt 的特点是都包含一个 PROJECT() 调用。除此之外还会在构建树上生成一套层次性的 makefile。通过默认的 make 目标,正确的 make 程序可以构建这个工程。makefile 还提供了 install 目标。

  • CodeBlocks - NMake Makefiles: 生成 CodeBlocks 工程文件。

    在顶层目录以及每层子目录下为 CodeBlocks 生成工程文件,生成的 CMakeList.txt 的特点是都包含一个 PROJECT() 调用。除此之外还会在构建树上生成一套层次性的 makefile。通过默认的 make 目标,正确的 make 程序可以构建这个工程。makefile 还提供了 install 目标。

  • CodeBlocks - Unix Makefiles: 生成CodeBlocks工程文件。

    在顶层目录以及每层子目录下为CodeBlocks生成工程文件,生成的CMakeList.txt的特点是都包含一个PROJECT()调用。除此之外还会在构建树上生成一套层次性的makefile。通过默认的make目标,正确的make程序可以构建这个工程。makefile还提供了install目标。

  • Eclipse CDT4 - MinGW Makefiles: 生成 Eclipse CDT 4.0 工程文件。

    在顶层目录下为 Eclipse 生成工程文件。在运行源码外构建时,一个连接到顶层源码路径的资源文件会被创建。除此之外还会在构建树上生成一套层次性的 makefile。通过默认的 make 目标,正确的 make 程序可以构建这个工程。makefile 还提供了 install 目标。

  • Eclipse CDT4 - NMake Makefiles: 生成 Eclipse CDT 4.0 工程文件。

    在顶层目录下为 Eclipse 生成工程文件。在运行源码外构建时,一个连接到顶层源码路径的资源文件会被创建。除此之外还会在构建树上生成一套层次性的 makefile。通过默认的 make 目标,正确的 make 程序可以构建这个工程。makefile 还提供了 install 目标。

  • Eclipse CDT4 - Unix Makefiles: 生成 Eclipse CDT 4.0 工程文件。

    在顶层目录下为 Eclipse 生成工程文件。在运行源码外构建时,一个连接到顶层源码路径的资源文件会被创建。除此之外还会在构建树上生成一套层次性的 makefile。通过默认的 make 目标,正确的 make 程序可以构建这个工程。makefile 还提供了 install 目标。

(SAW:Game Over!)

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐