C/C++ 项目编译工具简介
本文基于一个需要对 C 语言家族项目进行编译、生成解决方案的开发者的视角,对编译过程中所需要的各个工具进行简要的名词解释。
GCC | LLVM 提供编译器 <-- GNU Make 根据配置文件进行编译 <-- Autoconf | CMake 自动生成编译用的配置文件
注:上面提到的各类集合和工具所能做的事情并不仅仅局限于此。
GCC | LLVM
GCC 和 LLVM 是我们在编译 C 系项目时最常使用的两个工具链。
GCC 的全称是 GNU Compiler Collection , 即 GNU 编译器集合;
LLVM 的全称就是 LLVM (最开始的时候作为 Low Level Virtual Machine 的缩写,现在涵义已经发生了变化),现在是作为 LLVM 的编译器和工具链集合的一个总称。
gcc,全称 GNU C Compiler,是 GCC 中的 C 编译器;
g++,全称 GNU C++ Compiler,是 GCC 中的 C++ 编译器。
Clang 是 LLVM 集合前端中的 C 系编译器和工具链。Clang 兼容 GCC ,Clang 出现的时间比 GCC 晚,相比 GCC , Clang 的编译速度更快,错误提示更友好。
GNU Make
当项目的源文件数量很多,结构十分复杂时,仅仅使用编译器对项目进行编译,会是一件十分繁琐的事情,引用头文件目录,引入源文件,引入第三方静态库动态库都会十分的繁琐。
GNU Make 能够基于前面提供的编译器,选择项目中合适的源文件来生成项目所需的中间目标文件和可执行文件。开发者通过编写一个名为 makefile 的文件来指导 GNU Make 处理编译。
Autoconf | CMake
Autoconf 是 m4 宏处理的扩展包,通过它可以生成一个脚本,这个脚本能够自动生成编译用的配置文件。Autoconf 和 Automake 是一对。
CMake 是一个开源的软件,开发者通过编写独立于平台和编译器的配置文件,来指导项目的编译过程。
Autoconf 中涉及的概念比较多,生成脚本的步骤比较繁琐, CMake 在使用上更为简单。
参考链接
LLVM
GCC,the GNU Compiler Collection
GNU Make
diff between gcc and g++
Programming Languages Supported by GCC
Clang
CMake
Autoconf
C/C++ 项目编译工具简介的更多相关文章
- golang学习笔记5 用bee工具创建项目 bee工具简介
		
golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...
 - Android 反编译工具简介
		
Android 反编译工具: 所需工具:1 apktool : 用于获取资源文件 2 dex2Jar : 用于将classes.dex转化成jar文件 2 jd-gui: 将jar文件转化成java文 ...
 - JIRA项目跟踪管理工具简介与安装
		
1.什么是JIRA JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. Atlassian2002年 ...
 - Java反编译工具CFR,Procyon简介
		
Java反编译工具有很多,个人觉得使用最方便的是jd-gui,当然jad也不错,jd-gui主要提供了图形界面,操作起来很方便,但是jd-gui很久没有更新了,java 7出来很久了,jd-gui在反 ...
 - 一个使用命令行编译Android项目的工具类
		
一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...
 - java jdk 8反编译工具JD-GUI、procyon-decompiler、luyten、crf下载使用简介
		
本文对常用的反编译工具进行简单介绍 JD-GUI.procyon-decompiler.luyten.crf 反编译工具分类 JD-GUI JDK7以及之前可以使用 JD-GUI,如果版本&g ...
 - 初识FASTBuild  一个大幅提升C/C++项目编译速度的分布式编译工具
		
FASTBuild 是一款高性能.开源的构建系统,支持高度可扩展的编译,缓存和网络分发. 以上是FASTBuild官网对其产品的一句话介绍. FASTBuild 的开源地址:https://githu ...
 - 命令行编译工具NMAKE
		
简介 大家已经习惯于微软提供的功能强大的IDE,已经很少考虑手动编连项目了,所谓技多不压身,有空的时候还是随我一块了解一下命令行编译. C/C++/VC++程序员或有Unix/Linux编程经验应该很 ...
 - C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介
		
目录 为什么要刷LeetCode 刷LeetCode有哪些好处? LeetCode vs 传统的 OJ LeetCode刷题时的心态建设 C#如何刷遍LeetCode 选项1: VS本地Debug + ...
 
随机推荐
- div水平垂直居中的六种方法
			
在平时,我们经常会碰到让一个div框针对某个模块上下左右都居中(水平垂直居中),其实针对这种情况,我们有多种方法实现. 方法一: 绝对定位方法:不确定当前div的宽度和高度,采用 transform: ...
 - Netty学习——Google Protobuf的初步了解
			
学习参考的官网: https://developers.google.com/protocol-buffers/docs/javatutorial 简单指南详解:这个文档写的简直是太详细了. 本篇从下 ...
 - 用.NET解索尼相机ARW格式照片
			
用.NET解索尼相机ARW格式照片 目前常用的照片格式是.jpg,它只能提供8bit的色彩深度,而目前主流的相机都能提供高达12bit-14bit的色彩深度,动态范围和后期处理能力也大大增加,这也是为 ...
 - pom父工程dependencyManagement中的jar包在子工程中不写版本号无法引入的问题
			
1.遇到的问题: 本人用的idea,然后在导入别人的项目的时候,pom文件中没有报错了,但是在maven栏目中jar包却一直报红,是因为我没写版本的原因吗?不对呀,我的父工程下已经写了springb ...
 - #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
			
1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性.可维护性造成很大伤害,对于阅读代码 ...
 - 往Github上,上传本地项目
			
1.先申请一个Github的帐号,创建一个仓库. 复制这个仓库的地址: 创建完空仓库,页面下方会有提示代码,告诉怎么操作 在本地的项目下依次执行下面的代码: git init //在本地创建git ...
 - [TimLinux] django CentOS7中django+httpd+mod_wsgi中文UnicodeEncodeError错误
			
1. 错误 web端访问页面,页面内的view函数要写一个含有中文名字的文件,出现了这个错误.在PyCharm开发调皮环境中不存在这样的错误,把系统部署到http, mod_wsgi时出现. 2. 定 ...
 - 2017 ACM/ICPC 沈阳 F题 Heron and his triangle
			
A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...
 - elasticsearch搜索QueryStringQueryBuilder时的一些问题记录
			
首先看下原始数据 但是 如果使用英文查询的时候又和上面有点区别了,感觉还是分词器的问题
 - 浅析Java常量池
			
Java常量池 Java常量池其实分为两种:静态常量池和运行时常量池 1.静态常量池 所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类. ...