以前在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键就什么都搞定了。但是当移步linux下时,除非你使用图形界面,并且使用Qt creater这类的IDE时,才可以继续像windows下一样一键搞定所有事情,否则就不得不接触gcc/g++/make/cmake/makefile/cmakelists这些东西了,那他们是干什么的呢?彼此之间又是什么关系呢?

1、gcc/g++

gcc是GNU Compiler Collection的全称,是一个编译套件。通过gcc/g++我们就可以完成源文件的编译链接等工作,例如写了一个helloworld.cpp源程序,用: g++ helloworld.cpp -o helloworld就可以编译链接生成出一个名为helloworld的可执行文件了。这是一个文件的情况,但是当一个工程有很多个文件夹很多个文件时,继续通过这种方式一个一个去编译链接,那程序员不吐血才怪,于是便出现了makefile。

  2、makefile

  makefile其实就是包含了一堆有条理的gcc/g++编译命令的文件,我们可以提前手写好makefile文件,以此来提高工作效率。那有了makefile文件以后又该怎么玩呢?这个时候make就出现了。

  3、make

  make就是一个读取makefile文件中的指令来完成编译链接工作的工具。

  4、CMakelists

  手写makefile文件写得很嗨,但是当项目更加庞大时,估计就写得没那么嗨了。于是就出现了CMakelists,有了CMakelists程序员就不需要再去写makefile文件了,程序员只需要写更简单的CMakelists来生成对应的Makefile文件就可以了。那么makefile怎么通过CMakelists来生成呢?没错,就是通过cmake工具生成的。

  5、cmake

  类似Make工具的功能,CMake工具就是“读取”并执行CMakelists.txt文件中的语句,来生成对应的Makefile。然后开发者就可以通过Make工具来“执行”Makefile了。

  总结:论一个程序员变懒的过程。通过cmake读取CMakelists生成Makefile,然后再通过Make工具读取执行Makefile来构建工程。

最新文章

  1. ubuntu16.04文件形式安装mongodb
  2. 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
  3. ZooKeeper设置ACL权限控制
  4. GridView和DATAGRID前后台查询用法的比较
  5. vs2010 未能将脚本调试器附加到计算机上的进程。已附加了一个调试器
  6. 前端必备:FastStoneCapture 和 Licecap
  7. c++ 的vector
  8. sqlserver常用日期、时间函数和格式
  9. 美丽渐变色的Form
  10. insert into select * from 锁表
  11. Android Studio 简介
  12. 几个Linux常见命令
  13. php 判断是否登录
  14. Java线程池使用
  15. sql server 2008 sql prompt 自动提示
  16. Mysql数据中Packet for query is too large错误的解决方法
  17. docker容器与宿主交互数据
  18. MVC model验证 获取验证错误信息
  19. ds.Tables[0].Rows.RemoveAt(i)数据库表格删除行
  20. 2018-10-18 22:15:32 c language

热门文章

  1. Git创建合并和删除分支
  2. Jquery span标签的取值赋值
  3. mysql中utf8字符集的设置及character_set_database属性修改
  4. CSS制作二级菜单时,二级菜单与一级菜单不对齐
  5. C++基础之迭代器iterator
  6. SQL 层级数据查询出树形状态
  7. 5_2 木块问题(UVa101)<vector的使用>
  8. JavaSE复习~开发环境的搭建 与 HelloWorld
  9. 02-11Android学习进度报告十一
  10. 时隔两天,三星再称GalaxyFold已准备就绪,王自如的脸还好吗?