美文网首页
Makefile分步执行c语言编译过程

Makefile分步执行c语言编译过程

作者: CodingCode | 来源:发表于2023-08-16 05:29 被阅读0次

假设a.out需要两个源文件t0.c和t1.c。

$ cat Makefile
     1  all: a.out
     2
     3  a.out: t0.o t1.o
     4      gcc -g $(PIE) -o $@ $^
     5      @echo "Done"
     6
     7  %.o:%.c
     8
     9  %.o:%.s
    10      gcc -c -o $@ $<
    11
    12  %.s:%.i
    13      gcc -S -o $@ $<
    14
    15  %.i:%.c
    16      gcc -E -o $@ $<

运行:

$ make
gcc -E -o t0.i t0.c
gcc -S -o t0.s t0.i
gcc -c -o t0.o t0.s
gcc -E -o t1.i t1.c
gcc -S -o t1.s t1.i
gcc -c -o t1.o t1.s
gcc -g  -o a.out t0.o t1.o
Done
rm t0.i t1.i t0.s t1.s

几点说明:

  1. 行7的作用是屏蔽缺省的.c->.o的编译,否则make会自动使用这个规则,而导致不按照这个完整的编译路径进行;例如,注释掉第7行:
cc    -c -o t0.o t0.c
cc    -c -o t1.o t1.c
gcc -g  -o a.out t0.o t1.o
Done

可见,隐式的.c->.o的规则被调用了,而没有使用Makefile里面定义的规则。

  1. 运行的最后rm t0.i t1.i t0.s t1.s,并不是我们定义的指令。
    这是make的缺省规则,它会自动删除中间文件,这里.i和.s都是中间文件。
    如果要保留这些中间文件,则需要使用.PRECIOUS指令:
.PRECIOUS: %.s %.i

How make decide an intermediate file:
A file cannot be intermediate if it is mentioned in the makefile as a target or prerequisite.

相关文章

  • 【初识C语言】编译过程

    C语言编译过程 认识C编译执行过程,是C学习的开端。 我们来简单说C语言从编码编译到执行要经历一下过程: C源代码...

  • java_类的加载、链接、初始化

    makefile C/C++ 的makefile 处理的是编译,链接的过程,手下是将源文件编译成中间文件 .o文...

  • makefile的自动推导

    main.c 文件 test.c 文件 Makefile 文件 然后就可以编译出可执行文件了。 Makefile的...

  • C语言程序内存布局

    C语言笔记之02-C语言程序内存布局 我们知道C语言的编译过程分为:预处理-编译-汇编-链接-生成可执行文件,而这...

  • [Linux] MAKE命令

    MAKE命令 Tags: C Make Makefile 代码变成可执行文件,叫做编译(compile);先编译这...

  • 关于Makefile的使用

    本周主要学习在Linux系统下使用Makefile对多个C语言源程序进行编译。 对于多个C语言源程序编译的时候,可...

  • C语言编译过程详解

    C语言编译过程详解C语言的编译链接过程是要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行代码...

  • makefile快速入门

    makefile的作用:简化编译的过程,通过脚本来执行编译命令1、注释:‘#’开头:如: #这是一个注释 2、执行...

  • 用gcc编译,c语言程序以及其编译过程!点赞3连

    对于初学c语言编程的我们来说,学会如何使用gcc编译器工具,对理解c语言的执行过程,加深对c语言的理解很重要!!!...

  • C语言基础06:预编译指令

    一、C语言的执行流程 (一)编译 编译器将源代码转换成机器语言的过程。在编译过程中,会找出并报告错误,最后形成源文...

网友评论

      本文标题:Makefile分步执行c语言编译过程

      本文链接:https://www.haomeiwen.com/subject/fmdkmdtx.html