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. nginx 配置443 域名

    1 申请域名 (公有云)2 下载证书 pem key 并上传服务器指定目录3 公有云上做A记录解析 (解析到代理的nginx)4 nginx配置443模块 配置内容: server { listen ...

  2. python官方文档:https://pypi.org/

    https://pypi.org/ Find, install and publish Python packages with the Python Package Index

  3. PCB走线宽度与电流、温度的关系

    测试PCB的线长为24cm 其他:

  4. memoのPython和3D那点事

    首先来说,python想要搞点啥3D的玩意,是真麻烦.可以撤了. 少侠别走! 虽然很艰难,我还是找到一些体验不错的python库,可以拿来用. 首先,就是这里.前提是需要有conda.我直接装了个mi ...

  5. T137288 铸星

    有以下三种情况: 只有一个数,直接输出. 有正数也有复数,那就先让负数撞正数得到更小的负数,直到剩下最后一个正数撞所有的负数,答案是所有数的绝对值之和. 仅有正数或者仅有负数,就先找一对不相等的相邻的 ...

  6. [ZZH]第一篇博客

    time: 2022/3/29  20:24 my first blog

  7. Pytorch实战学习(七):高级CNN

    <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili Advanced CNN 一.GoogLeNet Inception Module:而为了减少代码的冗余,将由(卷积(C ...

  8. es实现规格分组分析

    es里面的规格是重复的,页面显示则是不重复

  9. springmvc的Interceptor拦截器和servlet的filter过滤器

    springmvc的Interceptor拦截器和servlet的filter过滤器 1.springmvc的Interceptor拦截器和servlet的filter过滤器springboot实现方 ...

  10. Generative Adversarial Network - Python实现

    算法特征 ①. discriminator区别真假; ②. generator以假乱真 算法推导 Part Ⅰ: 熵之相关定义 entropy之定义如下, \[\begin{equation*} H( ...