1:gcc编译的四个阶段:预处理,编译,汇编,链接

#vi file.c

#gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理

#gcc -S file.i -o file.s//-S编译到汇编而不进行汇编和链接

#gcc -c file.s -o file.o//-c编译到目标代码

#gcc file.o -o file//-o 文件输出到文件

# gcc -static file.c -o file//-static禁止使用动态库

;Makefile基本规则

1 all:test

2 echo “Hello World”

3 test:

4 @echo “Hi Hi”

;用Tab键空格

;all,test是目标

;2,4是生成目标的命令

#make(默认运行1),&make all ,&make test

;Makefile 依赖关系

1 simple:main.o foo.o bar.o

2         gcc -o simple main.o foo.o bar.o//执行命令

3 main.o:main.c

4         gcc -c main.c -o main.o//生成命令

5 foo.o:foo.c

6         gcc -c foo.c -o foo.o

7 bar.o:bar.c

8         gcc -c bar.c -o bar.o

9 clean:

10         rm *.o//清楚生成的文件

;simple依赖于:main.o foo.o bar.o

;三个.o文件又依赖于三个.c文件

#touch foo.c bar.c//不写main函数,多次定义报错

#vi main.c//写上main函数

#make clean//执行10

;假目标:.PHONY

1 .PHONY:clean

2 test:

3         echo "Hello"

4 clean:

5         rm *.c

;当目录中有其他clean时,可以使用假目标不与文件关联

;#vi test.c

#gcc -c test.c

# ls

test.c  test.o(目标文件)

#gcc -o test(可执行文件) test.o

# ls

test  test.c  test.o

;一个主程序调用另一个子程序

# cat test.c test2.c

#include<stdio.h>

int main()

{printf("你好啊,我是有主啊\n");

test_2();

return 0;}

------------------------------------------

void test_2(void)

{printf("谢谢啦,你也好啊!\n");

return 0;}

# gcc -c test.c test2.c

test2.c  test2.o  test.c  test.o

# gcc -o test test.o test2.o

test  test2.c  test2.o  test.c  test.o

gcc编译的四个阶段:预处理,编译,汇编,链接的更多相关文章

  1. C语言预处理 编译 汇编 链接四个阶段

    c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接. 编译过程 编译过程又可以分成两个阶段:编译和会汇编. 编译 编译是读取源程序(字符流),对之进行词法和语法的分析,将高 ...

  2. C代码通过编译器编译成可执行文件, 需经历 预处理、编译、汇编、链接 四个阶段

    内容借鉴 于yqzheng 一.预处理 1.任务: 进行宏定义展开.头文件展开.条件编译, 不检查语法 2.命令: gcc -E [源文件] -o [预处理文件] gcc -E hello.c -o ...

  3. gcc/g++ 实战之编译的四个过程

    gcc和g++分别是GNU(一个开源组织)的c&c++编译器   对于.c后缀的文件,gcc把它当做是C程序,g++当做是C++程序:对于.cpp后缀的文件,gcc和g++都会当做c++程序. ...

  4. 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记

    1 动态查看日志 tail -f filename tail -1000f filename 2 解压当前目录内容为xxx.zip  zip -r xxx.zip ./* 3 查看内存使用情况 fre ...

  5. C语言预处理编译链接各个阶段错误,分阶段的说一下

    C语言预处理编译链接各个阶段错误,分阶段的说一下 C语言预处理编译链接各个阶段错误,分阶段的说一下比如指针异常,数组下标越界什么的    我来答 1个回答 #热议# 你觉得这辈子有希望看到996消失 ...

  6. 重温JavaScript预编译的四个步骤

    JS是解释型语言,运行过程分三步: 一.语法分析(检查代码是否存在语法错误): 二.预编译(代码执行之前,在内存中开辟空间,存放变量与函数): 三.解释执行(执行JS代码): 理解预编译的过程,对于理 ...

  7. Less-css预处理编译

    node编译 第一步:https://nodejs.org/en/  到node官网下载最新的node 第二步:和普通软件一样把node安装好 第三步:运行-cmd,准备安装less 全局安装(整个电 ...

  8. Linux | GCC如何实现代码编译&&汇编&&链接过程

      正文: 每次我们程序员所写的 代码 是给程序员看的呢?还是给电脑看的?其实我们所写的代码只是我们程序员之间交流的一样特殊语言,电脑是看不懂的.那么我们如何实现人机交流呢?这就不得不请出我们我们今天 ...

  9. windows下使用gcc完成头文件和目标文件编译

    环境要求 安装了gcc win+r然后输入cmd , dos界面输入 gcc -v 查看有没有安装gcc 进入正题 新建 text.c文件键入如下代码: #include <stdio.h> ...

随机推荐

  1. WCF传输大数据的设置2

    本节主要内容:1.如何读取Binding中的binding元素.2.CustomBinding元素的基本配置.3.代码示例 一.Bingding是由binding元素构成的,可以根据实际需要,进行适当 ...

  2. Epson机械手4轴6轴示意图

    世界坐标系(World Coordinate System,简称WCS)是由三个垂直并相交的坐标轴X轴.Y轴和Z轴构成,一般显示在绘图区域的左下角,如图1-7所示.X轴和Y轴的交点就是坐标原点O,X轴 ...

  3. Android Token的使用学习

    学习Token Token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Tok ...

  4. Android网络连接判断与处理

    博客分类: Android 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android ...

  5. Highcharts使用

    Highcharts图表控件是使用比较广泛的图表控件.本文将介绍如何配置Highcharts和动态生成Highcharts图表.可参考Highcharts官网:http://www.highchart ...

  6. 如何隐藏DOM元素

    在CSS中,要隐藏DOM元素常见的方法有: 设置元素的opacity值为0 设置元素的visibility值为hidden 设置元素的display值为none 设置元素的position值为abso ...

  7. 作业七:团队项目——Alpha版本冲刺阶段004

    今日进展:我们的扫雷基本界面已经差不多了,准备开始编写内部代码. 今日安排:做好界面,准备开始代码编写.

  8. Hibernate的增删改查

    一.搭建Hibernate开发环境,这里就不说了,直接说环境搭好后的事情. 二.项目的目录结构

  9. Android深度探索--HAL与驱动开发----第六章读书笔记

    Linux驱动程序与其他类型的Linux程序一样拥有自己的规则,下面给出一个编写基本的Linux驱动的一般步骤: (1)建立Linux驱动的骨架(装载和卸载Linux驱动): (2)注册和注销设备文件 ...

  10. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...