gcc make 与cmake
1. gcc
(1)是什么?
它是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器。它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。
(2)怎么用?
当你的程序只有一个源文件时,直接就可以用gcc命令编译它。
(3)极限与困境。
如果你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大。
这时你需要召唤make了。
2. make
(1)是什么?
make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。
makefile是什么?makefile是一个文件,记录了一堆调用gcc(也可以是别的编译器)去编译某个源文件的命令。
(2)怎么用?
简单的说,makefile就像一首歌的乐谱,make工具就像指挥家,指挥家根据乐谱makefile指挥整个乐团怎么样演奏,make工具就根据makefile中的命令进行编译和链接的。
当项目工程比较简单时,完全可以人工编写makefile。
(3)极限与困境。
但是当工程非常大的时候,手写makefile是非常麻烦的、甚至不可能的事情,如果换了个平台makefile又要重新修改。
这时你需要召唤cmake了。
3. cmake
(1)是什么?
cmake可以更加简单的生成makefile文件给上面那个make用。当然cmake还有其他功能,就是可以跨平台生成对应平台能用的makefile,你不用再自己去修改了。
(2)怎么用?
cmake根据什么生成makefile呢?它又要根据一个叫CMakeLists.txt文件(学名:组态档)去生成makefile。
(3)CMakeLists.txt文件谁写啊?
亲,是你自己手写的。
当然如果你用IDE,类似VS这些一般它都能帮你弄好了,你只需要按一下那个三角形。
4. 个人建议
对于有野心的初学者,强烈建议不直接使用IDE。IDE屏蔽了太多细节,会阻止你成为一个视野开阔的开发者。
5. 参考
- 本文引用了一篇知乎问答,调整了表达方式:GCC 和 cmake的关系?
gcc make 与cmake的更多相关文章
- GCC G++ Make CMake自我科普
Linux下gcc g++ make cmake 联系和区别 C/C++程序从编写到可执行一般经历这几个阶段 编写源代码 编译器编译代码生成目标文件,如.o文件 链接器链接目标文件和其他目标文件/库文 ...
- gcc/g++/make/cmake/makefile/cmakelists的恩恩怨怨
以前在windows下用VS写代码,不管有多少个文件夹,有多少个文件,写完以后只需要一键就什么都搞定了.但是当移步linux下时,除非你使用图形界面,并且使用Qt creater这类的IDE时,才可以 ...
- CentOS 6.x安装多GCC版本号,cmake的安装与使用
操作系统:CentOS release 6.5 (Final) 当前gcc版本号:build=x86_64-redhat-linux Thread ...
- 安装 Qt 及所需 gcc 等
嫌麻烦,下载离线安装包一次性装好 Qt 及 Qt Creator (Community) Qt 安装包下载地址 http://download.qt.io/official_releases/qt/ ...
- cmake 及make 实践记录
DEBIAN操作系统 预备操作: 安装 gcc g++ make cmake 开启Terminal 切换到超级用户 下载安装上述软件 A@debian:~$ su Password: root@deb ...
- grpc使用记录(一) gRPC编译(mscv/gcc)
目录 1.编译前的准备工作 2.Windows下使用VS2019编译 2.1.使用cmake生成VS2019解决方案 2.2.使用msbuild工具进行编译 3.linux下编译 3.1 CentO ...
- mysql 5.6.24安装实例
安装前准备工作: 1)编辑PATH路径 vim /etc/profile PATH=/home/mysql/bin:/home/mysql/lib:$PATH export PATH 2)生效PATH ...
- 编译安装zabbix3.2
1.1 环境准备 系统环境准备:redhat 6.6 64位mysql-5.6.34php-5.6.28zabbix-3.2.1配置前先关闭iptables和SELINUX,避免安装过程中报错. # ...
- percona5.7 源码安装
200 ? "200px" : this.width)!important;} --> 介绍 主要为了测试percona的线程池的性能,这里就简单介绍一下percona5.7 ...
随机推荐
- hibernate框架学习第四天:关联关系、外键、级联等
一对多关联关系表 一方 多方(外键)实体类 一方:TeacherModel 添加多方的集合Set 多方StudentModel 添加一方的对象一方配置关系 name:一方模型中描述多方的集合对象名 c ...
- Mudo C++网络库第八章学习笔记
muduo网络库的设计与实现 muduo是基于Reactor模式的C++网络库; Reactor的关键结构 Reactor最核心的是事件分发机制, 即将IO multiplexing拿到IO事件分发给 ...
- python操作三大主流数据库(13)python操作redis之新闻项目实战①新闻数据的导入
1.新闻处理页面redis_news.py #coding:utf-8 import math import redis class RedisNews(object): def __init__(s ...
- linux服务器上配置多个svn仓库
linux服务器上配置多个svn仓库 1.在指定目录建立仓库保存总目录,本文示例目录设定为:/usr/local/svn/svnrepos # mkdir -p /usr/local/svn/svnr ...
- mysql-约束介绍
一.约束介绍 约束是一种限制,它通过对表的行或列的数据做出限制,来确保数据的完整性.一致性.约束条件与数据类型宽度一样都是可选参数. 常用约束: PRIMARY KEY (PK) 标识该字段为该表的主 ...
- 洛谷P4827 [国家集训队] Crash 的文明世界 [斯特林数,组合数,DP]
传送门 思路 又见到这个\(k\)次方啦!按照套路,我们将它搞成斯特林数: \[ ans_x=\sum_{i=0}^k i!S(k,i)\sum_y {dis(x,y) \choose i} \] 前 ...
- 清北学堂 清北-Day1-R2-监听monitor
题目描述 [背景] 不阅读本题的[背景]并不影响通过本题. 三体信息中没有包含对三体⼈⽣物形态的任何描述,⼈类要在四百多年以后才能真正看到三体⼈.在阅读信息时,叶⽂洁只能把三体⼈想象成⼈类的形象. 1 ...
- C# 通用数据库配置界面,微软原生DLL重整合
C# 通用数据库配置界面,微软原生DLL重整合 自己整合了 微软自带的数据连接配置界面对话库 Microsoft.Data.ConnectionUI.Dialog.dll 微软自带的数据连接配 ...
- Confluence 6 升级自定义的站点和空间应用你的自定义布局
当你升级你的 Confluence 到其他一个主要的 Confluence 发行版本的时候,你需要手动应用你修改过的任何全局或者空间级别的布局.除非有特殊的声明,针对一些非主要的 Confluence ...
- pod 使用详解
cd 进去到 项目目录 包含 xcodeproj 结尾的目录下 1 pod init 创建一个pod 文件 2 打开生产的pod 文件 然后 配置pod 文件 并保存 3 pod install 安 ...