cmake / cmake --build 如何理解
对于 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 如何理解相关推荐
- 现代 cmake (cmake 3.x) 操作大全
cmake 是一个跨平台编译工具,它面向各种平台提供适配的编译系统配置文件,进而调用这些编译系统完成编译工作.cmake 进入3.x 版本,指令大量更新,一些老的指令开始被新的指令集替代,并加入了 ...
- linux下cmake命令行,深入理解CMake(1): CMake命令行参数
初衷 CMake能用来编写跨平台(cross-platform)的构建规则,通过这些规则来调用各个平台的编译器.链接器,生成各个目标(静态库,静态库,或者可执行). 我第一个接触的大型C++项目是Op ...
- cmake(二十七)Cmake中target再理解
cmake翻译手册详解 cmake FAQ问题 一 目录结构 ++++++++++++++目录结构-->'最佳实践'++++++++++++++1)对于一个优秀的程序员而言,不仅仅是'编写 ...
- C++学习(四四二)cmake ninja build.ninja rules.ninja
build.ninja rules.ninja由cmake生成 ninja复制执行build.ninja rules.ninja 1.build.ninja build.ninja制定参数,比如链接的 ...
- catkin_make, cmake, catkin build区别
文章目录 1 catkin的历史 1.1 Legacy Catkin Workflow 1.2 Isolated Catkin Workflow 1.3 Parallel Isolated Catki ...
- cmake编译build
基于cmake编译C++程序,书名<视觉SLAM十四讲> 1.环境需求 ubuntu g++ cmake 安装方式: sudo apt install g++/cmake 2.helloS ...
- cmake linux 交叉编译,[CMake]CMake设置arm-linux-gcc交叉编译器
标签: cmake 交叉编译器 arm-linux-gcc 分类: 开发工具/开发环境 主机:Ubuntu18.04 交叉编译器:arm-linux-gcc CMake在ubuntu系统下默认使用系统 ...
- cmake是什么,为什么现在都用cmake,cmake编译原理和跨平台示例
一 cmake是什么? CMake是一个开源.跨平台的工具系列,是用来构建.测试和打包软件. CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用项目文件,比如可以生 ...
- 关于 CMake“cmake is not able to compile a simple test program”错误 的解决方法
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/110680001 长期持续带来更多项目与技术分 ...
最新文章
- FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件
- linux 下安装nodejs,CentOS 6.5 系统
- 简洁的 Bash Programming 技巧(三)
- 喜马拉雅 xm文件转m4a_喜马拉雅电台、课程语音如何转成文字?
- 32 SD配置-合作伙伴确认-设置客户主数据的合作伙伴确定
- [HTA] - HTML应用程序
- mysql二进制安装方法
- 接口的显式实现与隐式实现
- AsciidocFX相关
- 计算机组成原理 透明性,计算机组成原理试题
- 前端地图之色斑图渲染(直接canvas叠加渲染)(三)——以leaflet为例
- 遥感图像预处理—步骤
- 我的求职之路——首战:毕马威(KPMG)笔试
- 对未来技术方向的思考
- 坚持学习,坚持阅读,坚持思考
- html怎么改变li前面的点,CSS定义li前面的小点样式
- python主函数调用格式_python函数介绍
- 微信小程序---判断苹果11及以上型号手机
- Struts2学习之------Struts2的详细的复习讲解
- PHP重定向SEO,PHP类网站301重定向实战站长SEO必修课