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. pat乙级1014 福尔摩斯的约会

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> int ...

  2. cximage函数总结(拷贝)

    链接:   https://blog.csdn.net/flame_007/article/details/89293140 http://t.zoukankan.com/lidabo-p-69233 ...

  3. Chrome浏览器崩溃

    1.使用Win+R打开运行对话框,输入regedit,点击确定打开注册表: 2.找到"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome&q ...

  4. Linux安装Jemalloc

    在安装Jemalloc之前首选安装解压工具,Jemalloc源来自Github一般服务器很少安装bzip2解压 bzip2安装命令 yum -y install bzip2 CnetOS完整安装Jem ...

  5. 硬件IIC调试问题排查

    目录 沁恒蓝牙系列芯片中目前只有CH582/583以及208包含有硬件IIC外设,本文均使用582进行测试,其他沁恒芯片也可以参考本文排查. 先进行"常规"检查,检查相关引脚的焊接 ...

  6. Oracle UNDO表空间的管理

    Oracle UNDO表空间的管理 UNDO表空间的管理是Oracle DBA最重要的日常工作之一,UNDO表空间用来暂时存储DML操作的数据,其主要作用有: 1.事务回滚 2.实例恢复 3.读一致性 ...

  7. laravel-hash表的简单使用

  8. angular 路由守卫Observable异步请求串联

    假设路由守卫有这种场景 需要使用observable同时发送多个Http 请求,判断request2返回的数据中是否存在request1返回的数据 使用async await export class ...

  9. js 处理大数相减

    function sub(num1, num2) { if(num1 === num2) return '0' function lt(num1, num2) { if (num1.length &l ...

  10. mysql报错This function has none of DETERMINISTIC. NO SOL or READS SOL DATA...

    是因为 存储过程/存储函数在创建时 与 开启慢查询日志冲突了 解决冲突: 临时解决:开启log_bin_trust_function_creators show variables like '%lo ...