Makefile gcc 测试c编译流程.c->.i->.s->.o->可执行程序

# a.c->a.i->a.s->a.o->a
# .i 文件生成 -E(编译过程在预处理结束) gcc -E a.c -o a.i
# .s 文件生成 -S(编译过程在生成汇编代码结束) gcc -S a.i -o a.s
# .o 文件生成 -c(编译过程在汇编转为二进制后结束,不进行链接 -m32 生成32位汇编代码) gcc -c a.s -o a.o -m32
#可执行文件生成 gcc a.o -o a

a.i: a.c a.h
gcc -E a.c -o a.i
a.s: a.i
gcc -S a.i -o a.s
a.o: a.s
gcc -c a.s -o a.o
a: a.o
gcc a.o -o a

# Makefile 规则: 目标文件:依赖文件 a.i: a.c a.h
# Makefile 变量 变量名=123 $(变量名)
# Makefile 隐含变量
# $* 不包括扩展名的目标文件 a.i:a.c a.h $*=a
# $@ 包括扩展名的全部目标文件 a.i:a.c a.h $@=a.i
# $^ 所有的当前条目的依赖文件 a.i:a.c a.h $^=a.c a.h
# $< 第一个依赖文件 a.i:a.c a.h $<=a.c

# Makefile 函数调用 $(函数名 参数)
# $(wildcard *.c) --在当前文件夹下查找所有的.c文件
# $(patsubst %.c,%.o,main.c file.c) --参数 被替换的东西 想要替换成的东西 所有内容

SRC=$(wildcard *.c)
OBJ=$(patsubst %.c, %.o, $(SRC))
CC=gcc

hello:$(OBJ)
$(CC) -o $@ $^

.c.i:
$(CC) -E -o $*.i $<
# # .i.s 隐含规则 相当于 %.s:%.i
.i.s:
$(CC) -S -o $*.s $<
.s.o:
$(CC) -c -o $*.o $<
.c.o:
$(CC) -c -o $*.o $<

#伪指令 后面的命令不进行依赖检查
.PHONY: clean
clean:
rm -rf *.i *.s *.o hello
test:
echo $(SRC)
echo $(OBJ)

#vars.mk 调试变量 make -f Makefile -f var.mk OBJ
%:
  @echo '$*=$($*)'
d-%:
  @echo '$*=$($*)'
  @echo ' origin = $(origin $*)'
  @echo ' value = $(value $*)'
  @echo ' flavor = $(flavor $*)'

c基础-Makefile的更多相关文章

  1. 1-3 编程基础 makefile工程管理

    GNU make Linux程序员必须学会使用GNU make来构建和管理自己的软件工程.GNU的make能够使整个工程的编译.链接只需要一个命令就可以完成. makefile make在执行时,需要 ...

  2. (二)我的Makefile学习冲动&&编译过程概述

    前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...

  3. Makefile 跟着走快点

    引言  - 从"HelloWorld"开始 Makefile 是Linux C 程序开发最重要的基本功. 代表着整个项目编译和最终生成过程.本文重点是带大家了解真实项目中那些简易的 ...

  4. 《Linux内核设计与实现》CHAPTER17阅读梳理

    <Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...

  5. 20135220谈愈敏Linux Book_17

    第17章 设备与模块 关于设备驱动和设备管理的四种内核成分: 设备类型:在所有 Unix 系统中为了统一普通设备的操作所采用的分类. 模块: Linux 内核中用于按需加载和卸载目标码的机制. 内核对 ...

  6. 《Linux课本》读书笔记 第十七章 模块

    设备与模块: 设备类型:块设备(blkdev).字符设备(cdev).网络设备: 模块: 分析hello,world模块代码.Hello_init是模块的入口点,通过module_init()注册到系 ...

  7. Android中添加自己的模块 【转】

    本文转载自:http://wallage.blog.163.com/blog/static/17389624201021791333695/ 转:http://blog.csdn.net/yili_x ...

  8. Linux学习二:Makefile基础

    文首感谢http://www.chinaunix.net 作者:gunguymadman的分享 makefile关系到了整个工程的编译规则.一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个 ...

  9. Linux平台Makefile文件的编写基础入门(课堂作业)

    根据老师的要求,写一个超简单的makefile准备:       准备三个文件:file1.c, file2.c, file2.h       file1.c: #include "file ...

  10. Linux平台Makefile文件的编写基础篇(转)

    目的:       基本掌握了 make 的用法,能在Linux系统上编程.环境:       Linux系统,或者有一台Linux服务器,通过终端连接.一句话:有Linux编译环境.准备:      ...

随机推荐

  1. python collection Chainmap Counter

    chainmap是一个方便的工具类.它是使用链的方式将多个dict链在一起, 并不是真正的生成一个新的dict,从而允许程序可以这获取任意一个dict 所包含的所有key对应的value. 但是由于式 ...

  2. 重置Beyond Compare 4试用时间

    重置Beyond Compare 4试用时间 什么是Beyound Compare Beyond Compare是一套由Scooter Software推出的文件比较工具.主要用途是对比两个文件夹或者 ...

  3. 使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法

    使用oledb读写excel出现"操作必须使用一个可更新的查询"的解决办法 转自:http://www.cnblogs.com/Richinger/archive/2008/09/ ...

  4. git连接不上,使用git镜像

    github有一个镜像网站:把github替换为kgithub

  5. Spring Boot--自定义异常类

    1.业务异常 /** * @Description: 业务异常 * @Author: Yaoson * @Create: 2022/4/21 0:05 **/ public class Busines ...

  6. ES使用

    shards 分片数 ES存储数据可以存储在多个分片 下载ES curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elas ...

  7. HTML&CSS学习总结

    目录 一. HTML学习总结 1.HTML是什么 2.HTML结构 1. 创建一个HTML实例 2. HTML结构解析 3. HTML标题 4. HTML段落 5. HTML链接 6. HTML图像 ...

  8. vue input输入框关键字筛选检索列表数据展示

    想必大家在项目开发中难免会用到关键字筛选的功能,正好这次项目有需求要做这一块,就整理一下vue的input输入框输入关键字检索数据列表的代码.下面直接上代码: html: <!-- 筛选demo ...

  9. jQuery对象和js对象是怎样转换的?

    两种转换方式将一个jQuery对象转换成js对象:[index]和.get(index); (1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的js对象. 如:var $v ...

  10. 最近录了一些python视频教程

    最近录了一些python视频教程,目前有机器学习的.python基础知识的,大家可以去B站观看. https://space.bilibili.com/431152063 python机器学习之KNN ...