gcc make makefile 的基本介绍

2023-11-14

一.gcc

1.在window操作系统下,编译工具用集成开发环境

在Linux操作系统下没有很好的集成环境,用的编译器是gcc

 

2.程序的编译分为四个阶段 由 .c到可执行程序

(1). 预编译

(2). 编译

(3). 汇编

(4). 链接

3.编译程序

(1).一步到位

        gcc xxx.c 默认会生成一个名为 a.out 的可执行文件 

        gcc xxx.c -o xxx

        运行程序: ./xxx

(2)分步骤完成 

        [1]预处理   gcc -E xxx.c -o xxx.i  

        [2]编译     gcc -S xxx.i -o xxx.s

        [3]汇编     gcc -c xxx.s -o xxx.o

        [4]链接     gcc    xxx.o -o xxx

二.make 

1.什么是make

        make是个命令,是个可执行程序,用来解析Makefile文件的命令

        这个命令存放在 /usr/bin/ 

2.什么是makefile

        makefile是个文件,这个文件中描述了程序的编译规则

        执行make命令的时候,make命令会在当前目录下找makefile文件

        根据makefile文件里面的规则,编译程序

3.采用makefile的好处

        (1).简化编译程序的时候输入得命令,编译得时候只需要make命令即可

        (2).可以节省编译时间,提高编译效率

4.make主要解决的两个问题

        (1)大量代码的关系维护

        大项目中源代码多,手工维护、编译时间长而且编译命令复杂,难以记忆以及维护

        把代码维护命令以及编译命令写在makefile中,然后再用make工具解析此文件自动执行相应命令

        代码的合理编译

        (1)减少重复编译时间

在改动其中一个文件的时候,能判断哪些文件被修改过,可以只对改文件进行重新编译,,然后重新链接所有的目标文件,节省编译时间

5.makefile语法规则

        目标: 依赖文件列表

        <Tab> 命令列表 

        (1)目标

        通常是要产生的文件名称,目标可以是可执行文件或其它obj文件,也可是一个动作的名称

        (2)依赖文件

        是用来输入从而产生目标的文件,一个目标通常有几个依赖文件

        (3)命令

        make执行的动作,一个规则可以含几个命令.有多个命令时,每个命令占一行

6.make [-f file] [targets]

        (1) [-f file]

            make默认在工作目录中寻找名为GNUmakefile、makefile、 Makefile 的文件作为makefile输入文件

            -f可以指定以上名字以外的文件作为makefile输入文件

        (2) [targets]

        若使用make命令时没有指定目标,则make工具默认会实现makefile文件内的第一个目标,然后退出

        指定了make工具要实现的目标,目标可以是-一个或多个(多个目标间用空格隔开)。

三.makefile 

1. makefile变量

类似于C语言中的宏,当makefile被make工具解析时,其中的变量会被展开

2.变量的作用:

        (1)保存文件名列表

        (2)保存文件目录列表

        (3)保存编译器名

        (4)保存编译参数

        (5)保存编译的输出

3.变量分类

        (1)自定义变量

        在makefile文件中定义的变量,make工具传给makefile的变量

        

{ 
		定义变量:
			变量名=变量值
		引用变量:
			$(变量名) 或者 {变量名}
		makefile的变量名
			makefile的变量名可以以数字开头
		注意:
			1. 变量是大小写敏感的
			2. 变量一般都在makefile的头部定义
			3. 变量几乎可在makefile的任何地方使用 
	}

        (2)系统环境变量

        make工具解析makefile前,读取系统环境变量并设置为makefile的变量

        (3)预定义变量

{
		$@ 目标名
		$< 依赖文件列表中的第一个文件
		$^ 依赖文件列表中除去重复文件的部分
		AR  归档维护程序的程序名,默认值为ar
		ARFLAGS 归档维护程序的选项
		AS 汇编程序的名词,默认值为as
		ASFLAGS 汇编程序的选项
		CC C编译的名称,默认值为cc
		CFLAGS C编译器的选项 
		CPP C预编译器的名称,默认值为 $(CC) -E
		CPPFLAGS C预编译的选项
		CXX C++编译器的名称,默认值为 g++
		CXXFLAGS C++编译器的选项  
	}

        

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc make makefile 的基本介绍 的相关文章

随机推荐

  • 【Linux内核】cpu时间片的概念

    推荐阅读 浅谈linux 内核网络 sk buff 之克隆与复制 深入linux内核架构 进程 线程 了解Docker 依赖的linux内核技术 cpu时间片的概念 时间片即CPU分配给各个程序的时间 每个线程被分配一个时间段 称作它的时间
  • 【mcuclub】PTC加热模块

    一 实物图 名称 PTC加热片 工作电压 5V 最大温度 180 功率 7 12W 是否防水 不防水 外部加热 名称 加热棒 工作电压 5V 最大温度 110 功率 7 10W 是否防水 防水 可直接放入水中 二 简介 PTC电加热器是一种
  • Linux命令自动补齐oh-my-zsh插件及美化主题超详细

    安装zsh 1 查看系统当前使用的shell echo SHELL 2 查看系统是否安装了zsh cat etc shells 3 用yum安装zsh yum y install zsh 4 查看shell列表 cat etc shells
  • [附源码]计算机毕业设计Python游戏交易平台(程序+源码+LW文档)

    该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行 环境配置 Pychram社区版 python3 7 7 Mysql5 7 HBuilderX list pip Navicat11 Django nodejs 项目技
  • C#中Socket的Accept()和BeginAccept()的区别

    C 中Socket的Accept 和BeginAccept 的区别 区别在于 Accept 是同步的 BeginAccept 是异步的 调用accept 或者BeginAccept 函数来接受客户端的连接 这就可以和客户端通信了 Begin
  • 五分钟学会一门编程语言?

    大家好 我是可乐 看到标题 不出意外的话 你肯定开始骂我了 标题党 什么编程语言五分钟就能学会 其实我本来也是不相信的 但是学过了才知道这是真的 1 Brainfuck 看到这个小标题 不要误会 我没有骂人 这就是今天文章的主人公 也就是让
  • 如何理解BIO、NIO、AIO的区别

    一 同步阻塞I O BIO 同步阻塞I O 服务器实现模式为一个连接一个线程 即客户端有连接请求时服务器就需要启动一个线程进行处理 如果这个连接不做任何事情会造成不必要的线程开销 可以通过线程池机制来改善 BIO方式适用于连接数目比较小且固
  • Leetcode 124. 二叉树中的最大路径和

    题目内容 给定一个非空二叉树 返回其最大路径和 本题中 路径被定义为一条从树中任意节点出发 沿父节点 子节点连接 达到任意节点的序列 该路径至少包含一个节点 且不一定经过根节点 示例 1 输入 1 2 3 1 2 3 输出 6 示例 2 输
  • 使用 js 实现 贷款计算器功能

    table tr th Enter Loan Data th td td th Loan Balance Interest Payments th tr tr td Amount of Loan td tr table
  • Java NIO介绍(二)————无堵塞io和Selector简单介绍

    无堵塞IO介绍 既然NIO相比于原来的IO在读取速度上其实并没有太大区别 因为NIO出来后 IO的低层已经以NIO为基础重新实现了 那么NIO的优点是什么呢 NIO是一种同步非阻塞的I O模型 也是I O多路复用的基础 而且已经被越来越多地
  • 【我的Java笔记】List集合中set()方法的使用

    方法 E set int index E element 首先看一下API里对List集合中的set 方法的描述 例 使用List集合中的set 方法进行冒泡排序 import java util ArrayList public clas
  • WebDriverException unexpectedly exited. Status code was: 2

    raise WebDriverException selenium common exceptions WebDriverException Message Service D Projects test geckodriver exe u
  • 计数器实现七分频

    七分频 即将输入信号的频率变为原来的七分之一 本文用计数器实现输入信号的七分频 一 画出七分频的时序逻辑 实现原理 图中用到了两个计数器 一个上升沿触发一个下降沿触发 且每当计数器从0计数到6时 复位 中间信号sig1 sig2分别在cnt
  • xhtml2pdf如何支持中文

    这段时间在做一个图片PDF的项目 需要把网页转换成PDF 找到了python的xhtml2pdf这个库 个方面都满意 只是对中文的支持不好 html上的中文转换成PDF后都成了乱码 貌似中文网站都没有找到合适的解决办法 只能求助于万能的go
  • 传统语音增强——基本的维纳滤波语音降噪算法

    一 维纳滤波的基本原理 基本维纳滤波就是用来解决从噪声中提取信号问题的一种过滤 或滤波 方法 它基于平稳随机过程模型 且假设退化模型为线性空间不变系统的 实际上这种线性滤波问题 可以看成是一种估计问题或一种线性估计问题 基本的维纳滤波是根据
  • error LNK2001: 无法解析的外部符号 “void __cdecl cv::cvtColor

    c 调用opencv时报错了 error LNK2001 无法解析的外部符号 void cdecl cv cvtColor 现在发现有两个可能的原因 原因1 没有添加lib库 需要添加lib库 VC 目录 包含目录 VC 目录 库目录 链接
  • 网络安全入门学习练手——CS伪装钓鱼网站

    文章目录 一 实验环境 二 使用工具和目标 三 开始复现 1 启动Cobalt Strike服务器端 打开Cobalt Strike客户端 2 设置监听器 3 网站克隆 4 在受害者端输入克隆网站对应的ip 5 测试 四 拓展 让钓鱼网址挂
  • 记录一次mac电脑安装git并在idea中使用的问题

    一 安装Git 下载地址 https sourceforge net projects git osx installer 点击下载最新版就可以了 下载速度很快的 下载完直接打开 默认安装即可 安装完成直接在命令行用root用户执行 git
  • L1-020 帅到没朋友(java)

    1 题目详情 当芸芸众生忙着在朋友圈中发照片的时候 总有一些人因为太帅而没有朋友 本题就要求你找出那些帅到没有朋友的人 输入格式 输入第一行给出一个正整数N 100 是已知朋友圈的个数 随后N行 每行首先给出一个正整数K 1000 为朋友圈
  • gcc make makefile 的基本介绍

    一 gcc 1 在window操作系统下 编译工具用集成开发环境 在Linux操作系统下没有很好的集成环境 用的编译器是gcc 2 程序的编译分为四个阶段 由 c到可执行程序 1 预编译 2 编译 3 汇编 4 链接 3 编译程序 1 一步