1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。

2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它。

3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大

4.所以出现了make工具
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。比如一个makefile文件:

SUBDIR=src xml #定义变量
SUBDIR+= osapi #追加字符串
PWD=$(shell pwd) #使用内部函数
CXX_SOURCE=$(wildcard ./*.cpp)#同上hello:main.cpp normal.cpp other.cpp normal.hpp other.hpp
#目标:依赖echo $@ #打印目标echo $^ #打印依赖项echo $< #打印依赖项的第一项g++ -c main.cpp -o main.og++ -c normal.cpp -o normal.og++ -c other.cpp -o other.og++ main.o normal.o other.o -o hello
clean:rm -rf *.o
test1:echo $(SUBDIR) #打印变量值,小括号必须
test2:@echo $(PWD)   #加@后,执行时,在终端不显示该命令行,而是直接显示结果
test3:echo $(CXX_SOURCE) #显示源文件名单

命名:

makefile 或 Makefile

5.makefile是什么?
make工具就根据makefile中的命令进行编译和链接的。makefile命令中就包含了调用gcc(也可以是别的编译器)去编译某个源文件的命令。

6.makefile在一些简单的工程完全可以人工手下,但是当工程非常大的时候,手写makefile也是非常麻烦的,如果换了个平台makefile又要重新修改。

7.这时候就出现了Cmake这个工具,Cmake就可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。

可是cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。

10.到最后CMakeLists.txt文件谁写啊?亲,是你自己手写的。

11.当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形

作者:辉常哥
链接:http://www.zhihu.com/question/36609459/answer/89743845
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

cmake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。
最后,CMakeLists.txt文件如何书写和使用呢,网上很多案例,比如https://www.cnblogs.com/cv-pr/p/6206921.html 在这里就不展开说明啦。

Ubuntu学习日记--Lesson10:gcc、make、makefile、cmake、cmakelists区别相关推荐

  1. 在ubuntu系统下使用gcc和makefile实现c语言程序的编译运行

    目录 前言 一.使用gcc命令完成编译c语言程序 1.编写c语言程序 main1.c sub1.h sub1.c 2.gcc命令编译 步骤一命令:gcc -c sub1.c作用:将sub1.c程序转换 ...

  2. Ubuntu系统下用gcc和Makefile编程

    # 安装Ubuntu 在Windows环境下通过虚拟软件VMware安装Ubuntu https://pan.baidu.com/s/1KAZuW46ObVmIXZeoccs90Q [提取码]:wd5 ...

  3. ubuntu学习日记--Lesson6:shell,bash,dash

    原文链接:http://www.cnblogs.com/hf8051/p/4538986.html 终端:即所谓的命令行界面,又称命令终端,用户输入shell命令用的窗口,跟Windows里的DOS界 ...

  4. Ubuntu学习日记--Lesson1:Linux基础和常用命令

    版权生命:文章系原创,转载请注明出处,多谢! 为了在Linux系统下用深度学习框架caffe,系统补习了一下Linux操作的知识,做些笔记,以备复习,或随时查看. Lesson1:Linux基础和常用 ...

  5. Ubuntu学习日记--Lesson9:显卡工作状态查看命令

    在使用GPU做计算,比如跑 Deep Learning代码的时候,我们可能希望能够实时检测显存的使用情况,但是Linux一般不会自带监视现存的工具.Nvidia自带了一个 nvidia-smi的命令行 ...

  6. Ubuntu学习日记--Lesson7:文件权限管理chmod

    原文链接:http://blog.chinaunix.net/uid-21880738-id-1813031.html Ubuntu的许多操作是在终端中进行的,通过sudo命令管理的文件是由root持 ...

  7. ubuntu学习日记--Lesson5:系统目录详解

    原文链接:http://www.cnblogs.com/ajianbeyourself/p/4187535.html 我们平时最常用的写目录为:/home/[username],  /etc,  /v ...

  8. Ubuntu学习日记--Lesson4:环境变量详解

    原文链接:http://www.linuxidc.com/Linux/2016-09/135476.htm 使用Ubuntu 进行开发绕不开的就是环境变量的配置,由于Linux系统严格的权限管理,造成 ...

  9. Ubuntu学习日记--Lesson2:创建、重命名、删除文件及文件夹,强制清空回收站方法

    原文链接:http://blog.csdn.net/yuzhiyuxia/article/details/7919091 mkdir 目录名           --创建一个目录 rmdir 空目录名 ...

最新文章

  1. 攻防世界-hit-the-core(简单详细)
  2. 鸿蒙轻内核的得力助手:带你掌握4种内存调试方法
  3. c++语言将任意进制转化10进制,C++ 基础编程之十进制转换为任意进制及操作符重载...
  4. 古文构词之法、造词之法
  5. php 统计页面跳失率,究竟网店各页面的跳失率大小为多少才算正常水平?
  6. EXcel 2016高级VBA编程下载
  7. 如何用pe备份linux系统盘,使用轻松备份创建可启动光盘或U盘
  8. [转] 使用CPN Tools工具做简单的登录模型()
  9. 中心极限定理与大数定律的区别
  10. 微信小程序RSA非对称加密。
  11. makefile编写知识小结
  12. 广州土地市场有所回暖?分析广州房价,看看有什么新发现
  13. 如何在centos环境下运行.exe文件
  14. 信息无障碍研究机构---教育、公益等
  15. 登录路由器显示服务器拒绝访问,ie浏览器拒绝访问原因如何解决
  16. Mac版 XMind 去除【试用模式】水印
  17. 从燃油车布局新能源,汽车服务商们谋破局
  18. sklearn学习04——DecisionTree
  19. C语言最短时间旅游路线查询系统,基于QT实现的旅游路线查询系统
  20. 0xC0000005: 读取位置 0x6C6C6568 时发生访问冲突的原因及解决方法

热门文章

  1. Unity3D之NGUI基础3.1:代码控制UILabel
  2. 运算符重载的非成员函数形式
  3. bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛(floyd)
  4. 2017 Multi-University Training Contest - Team 4:1002. Classic Quotation(KMP+DP)
  5. ubuntu14.04无法打开新加卷
  6. javascript学习之数组的使用四 concat方法 join方法 reverse方法 sort方法
  7. kubectl命令大全
  8. java级别_Java的访问级别(深入版)
  9. 怎样把一个字典的数据添加到另一个字典中?
  10. C#多线程之线程池篇1