程序在cmake编译是这样的流程, cmake指令依据你的CMakeLists.txt 文件,生成makefiles文件,make再依据此makefiles文件编译链接生成可执行文件. catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了 ...

.configure------------>Makefile文件---------------make(Makefile)------------->make install(Makefile)-------------->make clean

cmake(CMakeList.txt)------------->Makefile文件--------------->make(Makefile)

1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。
3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大
4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
5.makefile是什么?简单的说就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。
6.makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。
7.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。
8.这时候就出现了Cmake这个工具,cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
9.可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。
10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。
11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形
12.接着是qmake,qmake是什么,先说一下Qt这个东西。Qt是跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。简单的说就是C++的第三方库,使用这个库你可以很容易生成windows,Linux,MAC os等等平台的图形界面。现在的Qt还包含了开发各种软件一般需要用到的功能模块(网络,数据库,XML,多线程啊等等),比你直接用C++(只带标准内裤那种)要方便和简单。
13.你可以用Qt简简单单就实现非常复杂的功能,是因为Qt对C++进行了扩展,你写一行代码,Qt在背后帮你写了几百上千行,而这些多出来的代码就是靠Qt专有的moc编译器(The Meta-Object Compiler)和uic编译器(User Interface Complier)来重新翻译你那一行代码。问题来了,你在进行程序编译前就必须先调用moc和uic对Qt源文件进行预处理,然后再调用编译器进行编译。上面说的那种普通makefile文件是不适用的,它没办法对qt源文件进行预处理。所以qmake就产生了。
14.qmake工具就是Qt公司制造出来,用来生成Qt 专用makefile文件,这种makefile文件就能自动智能调用moc和uic对源程序进行预处理和编译。qmake当然必须也是跨平台的,跟cmake一样能对应各种平台生成对应makefile文件。
15.qmake是根据Qt 工程文件(.pro)来生成对应的makefile的。工程文件(.pro)相对来说比较简单,一般工程你都可以自己手写,但是一般都是由Qt的开发环境 Qt Creator自动生成的,你还是只需要按下那个邪恶三角形就完事了。
16.还没有完,由于qmake很简单很好用又支持跨平台,而且是可以独立于它的IDE,所以你也可以用在非Qt工程上面,照样可以生成普通的makefile,只要在pro文件中加入CONFIG -= qt 就可以了。
17. 这样qmake和cmake有什么区别?
不好意思,cmake也是同样支持Qt程序的,cmake也能生成针对qt 程序的那种特殊makefile,
只是cmake的CMakeLists.txt 写起来相对与qmake的pro文件复杂点。
qmake 是为 Qt 量身打造的,使用起来非常方便,但是cmake功能比qmake强大。
一般的Qt工程你就直接使用qmake就可以了,cmake的强大功能一般人是用不到的。
当你的工程非常大的时候,又有qt部分的子工程,又有其他语言的部分子工程,据说用cmake会 方便,我也没试过。

-------------------------------------------------------------ROS编译:catkin简析 ---------------------------------------------

1. catkin_make 与cmake的关系

程序在cmake编译是这样的流程, cmake指令依据你的CMakeLists.txt 文件,生成makefiles文件,make再依据此makefiles文件编译链接生成可执行文件.

catkin_make是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径.

1) cmake标准流程

# 在一个CMake项目里
$ mkdir build
$ cd build
$ cmake ..
$ make
$ make install  # (可选)  

2) catkin_make 的流程

# In a catkin workspace
$ catkin_make
$ catkin_make install  # (可选)
如果源码不在默认工作空间,需要指定编译路径:
# In a catkin workspace
$ catkin_make --source my_src
$ catkin_make install --source my_src  # (optionally)

转:make cmake和catkin_make的区别相关推荐

  1. cmake 编译选项 add_compile_options CMAKE_CXX_FLAGS 区别

    在cmake脚本中,设置编译选项可以通过add_compile_options命令,也可以通过set命令修改CMAKE_CXX_FLAGS或CMAKE_C_FLAGS. 使用这两种方式在有的情况下效果 ...

  2. CMake PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR区别

    看了好多网上的文章,都说PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR是等价的. 实际不然. 一般来说,都是这样用 cmake ./ 这样PROJECT_BINARY_DI ...

  3. Makefile和Cmake的联系与区别

    CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多.CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要 ...

  4. cmake nmake qmake 的区别联系

  5. catkin_make

      普通情况下编译文件都是使用cmake,make工具,与此有关的内容可以参考:cmake,CMakeLists.txt,make,makefile的关系   但ROS中还有catkin_make,不 ...

  6. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  7. catkin_make, cmake, catkin build区别

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

  8. Cmake学习实战-基础篇

    一.Cmake 常用语句 1.1 程序的编译和执行 源程序经过预处理.编译.汇编.链接步骤后,才能生成可执行程序. 预处理:条件编译,头文件包含,宏替换的处理,刪除注释,生成.i文件. gcc -E ...

  9. 跨平台CMake判断当前平台是Linux还是Windows

    当我们的工程需要跨平台时(一般都是Linux和Windows双平台),写的CMake也会有所区别,所以需要判断当前的平台,执行不同的构建指令.Cmake本身提供了很多变量来判断当前的系统环境,如图下所 ...

  10. Ubuntu18.04配置搭建基于Gazebo的虚拟仿真平台(Px4):无人机(UAV)、无人车等模拟实验平台

    这篇我觉得是写得比较详细完整的 摘自:https://dgzc.ganahe.top/ganahe/2021/uavgazebomoni.html Ubuntu18.04配置搭建基于Gazebo的虚拟 ...

最新文章

  1. Node.js获取mac网卡地址
  2. 考研专业课计算机网络调剂,计算机网络信息中心2019年硕士研究生接收调剂信息公告...
  3. 【大会】嵌入式玩直播,IoT做前处理
  4. github开源项目_GitHub项目分析,3D打印义肢和更多开源新闻
  5. @Transactional +自定义注解不生效_SpringBoot之路(三)SpringDataJpa中常用注解的使用...
  6. 工业机器人维保调查表_《工业机器人系统集成及维护》课程建设调研报告
  7. Java-获取本地都有哪些字体
  8. scala编程_Scala编程语言简介
  9. OSPFv3报文中Option字段变化简介
  10. Springboot @Validated和@Valid
  11. ASO优化含义篇:积分墙是什么?
  12. 深入 Parcel架构与流程
  13. html 自动填充缓存,禁止input密码自动填充及浏览器缓存密码账号解决方案
  14. Polar SC的C语言实现之译码篇
  15. asterisk 说明
  16. Android UI 组件开源软件(一)
  17. 基于“把点开活”的面试理论
  18. EasyAR_入门简单案例
  19. 【渝粤题库】广东开放大学 工程施工组织与设计 形成性考核
  20. SEO教程VIP资源合集,速度领!手慢无

热门文章

  1. IOS描述文件mobileprovision问题
  2. 图像转换成lmdb格式
  3. Linux系统备份工具 REAR (RELAX-AND-RECOVER)
  4. 【已解决】Mac每次重启,谷歌Chrome都会丢失所有的扩展程序/extensions/插件
  5. spring security自定义登录失败返回错误信息
  6. 1072 开学寄语 C++实现
  7. lda指令是什么意思_汇编指令大全
  8. MPC5607B串口接收中断程序
  9. 一级路由器静态路由访问二级路由器的方法二
  10. Java实现 kiosk模式,適用於Linux Java Swing應用程序的Kiosk模式