Linux下gcc/g++、make和cmake的区别
文本程序到可执行文件生成无论在什么平台大致分为以下几个部分:
1.用编辑器编写源代码,如.c文件。
2.用编译器编译代码生成目标文件,如.o。
3.用链接器连接目标代码生成可执行文件,如.exe。
Linux平台下,.o文件一般是通过编译的但还未链接的目标文件,.out文件一般都是经过相应的链接产生的可执行文件(linux下)。当然这是一般情况下人们这么设置,而真正的,在linux中 .o通常保存的是可执行代码 ,至于可执行文件则没有规定扩展名,用的是文件属性位来决定的是否可执行。在chmod中设置。
我们知道编译和链接阶段是靠g++和gcc编辑器来完成,这两个编译阶段是相同的,但是链接阶段g++默认链接c++库,所以一般情况下用gcc编译c文件,而g++编译cpp文件。当然g++也可以编译c文件,而gcc编译cpp文件则需要在后面加上参数-lstdc++,作用就是链接c++库。
但是如果编译和链接的阶段如果源文件太多,一个一个编译时就会特别麻烦,于是人们想到,为什么不设计一种类似批处理的程序,来批处理编译源文件呢,于是就有了make工具,它是一个自动化编译工具,你可以使用一条命令实现完全编译。但是你需要编写一个规则文件,make依据它来批处理编译,这个文件就是makefile,所以编写makefile文件也是一个程序员所必备的技能。
对于一个大工程,编写makefile实在是件复杂的事,于是人们又想,为什么不设计一个工具,读入所有源文件之后,自动生成makefile呢,于是就出现了cmake工具,它能够输出各种各样的makefile或者project文件,从而帮助程序员减轻负担。但是随之而来也就是编写cmakelist文件,它是cmake所依据的规则。所以在编程的世界里没有捷径可走,还是要脚踏实地的。
原文件—cmakelist —cmake —makefile —make —生成可执行文件(make中则包含了多条链接以及gcc/g++编译语句)。
参考自下面博文:
http://blog.sina.com.cn/s/blog_74a459380102uxlz.html
---------------------
作者:无鞋童鞋
来源:CSDN
原文:https://blog.csdn.net/FX677588/article/details/53159019
版权声明:本文为博主原创文章,转载请附上博文链接!
Linux下gcc/g++、make和cmake的区别相关推荐
- Linux下gcc/g++编译器gdb调试器和makefile的使用
文章目录 一.gcc的使用 gcc选项 二.gdb的使用 三.Linux项目自动化构建工具-make/Makefile 3.1 概念 3.2 使用 3.3 原理 一.gcc的使用 首先我们知道一个C/ ...
- Linux下 gcc/g++ 版本切换与CMake各版本安装
一. gcc/g++ 版本切换 首先下载需要的版本(以gcc8为例) sudo apt-get install gcc-8 删除原有的gcc链接, 改为新链接 cd /usr/bin sudo rm ...
- linux中i的英文单词,Linux下gcc/g++中-I(i的大写)、-L和-l
makefile 学习网站 http://blog.csdn.net/ruglcc/article/details/7814546/#t30 第九章 C语言在嵌入式中的应用 上章回顾 编码的规范和程序 ...
- Linux下gcc/g++中-I(i的大写)、-L和-l
-I(i的大写) include头文件非标准库中存在的也不是在当前文件夹下的,需要将地址用-i(大写)包含 例:-I /home/src/ -L 用到的函数或操作非标准库下的,需要将库存在的地址用-L ...
- linux opengl配置编译,Linux下OpenGL的安装与cmake编译OpenGL程序
Linux下OpenGL的安装与cmake编译OpenGL程序 OpenGL安装 安装命令如下: $ sudo apt install build-essential $ sudo apt insta ...
- 采用 linux+eclipse+gcc g++ 来弄C 的多线程编程
---------------------------------------- ================ 对于 C项目的 多线程编程 放弃 windows+mingw+eclipse 采用 ...
- Linux 下 gcc的安装
Linux 下 gcc的安装 gcc的安装 问题 检查版本 解决过程 gcc的安装 问题 在一个新的Linux服务器上安装nginx的时候,命令都不能解析,缺少gcc编辑器,安装gcc的命令也出错. ...
- 【OpenCV】Linux 下用 g++ 编译 OpenCV 程序
编译命令: g++ gaussianBlur.cpp -o test `pkg-config --cflags --libs opencv` 执行编译生成的可执行文件: ./test gaussian ...
- 图解Cygwin安装教程(win10下gcc,g++安装)
Cygwin安装教程(win10下gcc,g++安装) 1. 从cygwin官网下载安装包,下载地址:http://www.cygwin.com/setup-x86_64.exe 2. 点击" ...
最新文章
- 研究速递:老年人的心智能力不一定在衰减,抗干扰的能力会更强
- 使用vuex实现父组件调用子组件方法
- 微信小程序和传统网页开发的区别
- php 完全前后端分离使用jwt,larke-admin 是一套使用 Laravel 8 、JWT 和 RBAC鉴权的前后端分离的通用后台管理系统...
- 学弟学妹看我文章顺利毕业,基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》
- IntelliJ IDEA 记学习笔《装阿里代码规范插件》
- java 生成 rtf_如何从Java生成RTF?
- H3C和锐捷如何查看光衰
- 银河麒麟桌面V10微信不能登录
- 在SQL中创建时间维度表
- HTML图片映射矩形坐标,HTML图片热区map area的用法(转载)
- 链栈的表示和实现(C++)
- switch 语句 -- 超详解
- 观战朝鲜vs巴西后,给中国足球的两点建议
- 加载java连接sqlserver驱动_sqlserverdriver配置方法 jdbc连接sqlserver
- 3 Python数据分析 美国各州人口分析案例 Pandas高级操作 美国大选献金案例 matplotlib
- 超详细的纯CSS的照片墙特效
- 第十章 IP的分片与重装
- C. Electrification(尺取)
- 十四、圣经是蒙恩的凭藉
热门文章
- python中os.path.basename的使用
- 利用matlab写一个简单的拉普拉斯变换提取图像边缘
- -函数-MATLAB提供的函数/主子函数/匿名-嵌套函数
- smooth_l1_loss(y_true, y_pred)
- Why not inherit from ListT?
- 违反了引用完整性约束。Dependent Role 具有多个具有不同值的主体。S级乌龙,自己制造的笑话...
- loadrunner:关联操作
- php.ini – 配置文件详解
- Ajax Post请求实例
- NSArray 的遍历