对于 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!)

cmake / cmake --build 如何理解相关推荐

  1. 现代 cmake (cmake 3.x) 操作大全

      cmake 是一个跨平台编译工具,它面向各种平台提供适配的编译系统配置文件,进而调用这些编译系统完成编译工作.cmake 进入3.x 版本,指令大量更新,一些老的指令开始被新的指令集替代,并加入了 ...

  2. linux下cmake命令行,深入理解CMake(1): CMake命令行参数

    初衷 CMake能用来编写跨平台(cross-platform)的构建规则,通过这些规则来调用各个平台的编译器.链接器,生成各个目标(静态库,静态库,或者可执行). 我第一个接触的大型C++项目是Op ...

  3. cmake(二十七)Cmake中target再理解

    cmake翻译手册详解 cmake FAQ问题 一    目录结构 ++++++++++++++目录结构-->'最佳实践'++++++++++++++1)对于一个优秀的程序员而言,不仅仅是'编写 ...

  4. C++学习(四四二)cmake ninja build.ninja rules.ninja

    build.ninja rules.ninja由cmake生成 ninja复制执行build.ninja rules.ninja 1.build.ninja build.ninja制定参数,比如链接的 ...

  5. catkin_make, cmake, catkin build区别

    文章目录 1 catkin的历史 1.1 Legacy Catkin Workflow 1.2 Isolated Catkin Workflow 1.3 Parallel Isolated Catki ...

  6. cmake编译build

    基于cmake编译C++程序,书名<视觉SLAM十四讲> 1.环境需求 ubuntu g++ cmake 安装方式: sudo apt install g++/cmake 2.helloS ...

  7. cmake linux 交叉编译,[CMake]CMake设置arm-linux-gcc交叉编译器

    标签: cmake 交叉编译器 arm-linux-gcc 分类: 开发工具/开发环境 主机:Ubuntu18.04 交叉编译器:arm-linux-gcc CMake在ubuntu系统下默认使用系统 ...

  8. cmake是什么,为什么现在都用cmake,cmake编译原理和跨平台示例

    一 cmake是什么? CMake是一个开源.跨平台的工具系列,是用来构建.测试和打包软件. CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生 ...

  9. 关于 CMake“cmake is not able to compile a simple test program”错误 的解决方法

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110680001 长期持续带来更多项目与技术分 ...

最新文章

  1. FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件
  2. linux 下安装nodejs,CentOS 6.5 系统
  3. 简洁的 Bash Programming 技巧(三)
  4. 喜马拉雅 xm文件转m4a_喜马拉雅电台、课程语音如何转成文字?
  5. 32 SD配置-合作伙伴确认-设置客户主数据的合作伙伴确定
  6. [HTA] - HTML应用程序
  7. mysql二进制安装方法
  8. 接口的显式实现与隐式实现
  9. AsciidocFX相关
  10. 计算机组成原理 透明性,计算机组成原理试题
  11. 前端地图之色斑图渲染(直接canvas叠加渲染)(三)——以leaflet为例
  12. 遥感图像预处理—步骤
  13. 我的求职之路——首战:毕马威(KPMG)笔试
  14. 对未来技术方向的思考
  15. 坚持学习,坚持阅读,坚持思考
  16. html怎么改变li前面的点,CSS定义li前面的小点样式
  17. python主函数调用格式_python函数介绍
  18. 微信小程序---判断苹果11及以上型号手机
  19. Struts2学习之------Struts2的详细的复习讲解
  20. PHP重定向SEO,PHP类网站301重定向实战站长SEO必修课

热门文章

  1. JAVA程序猿面试题汇总
  2. sizeof 计算struct大小
  3. cctype,string,vector
  4. Linux Oracle10g安装
  5. android中的broadcastReceiver
  6. 关于ResultSet can not re-read row data for column 1 解决方法
  7. spark-jobserver介绍: 提供了一个 RESTful 接口来提交和管理 spark 的 jobs、jars 和 job contexts
  8. Linux LVM相关概念
  9. yum安装docker(阿里镜像源)及docker-compose二进制安装
  10. python3数据类型:Set(集合)