继续学习makefile,希望尽快掌握makefile好在面试中更好的掌握方向!加qq1126137994一起学习更多技术!!

1、回顾

makefile的意义:

  • makefile用于定义源文件之间的依赖关系
  • makefile说明如何编译各个源文件并生成可执行文件

依赖的定义:

‘\t’ 代表的是tab键!

makefile中各元素的意义:
-targets:

  • 通常是需要生成的目标文件名
  • make所需执行的命令名称

-prerequisities:

  • 当前目标所依赖的其他目标或依赖

-command:

  • 完成目标所需执行的命令

注意事项:

  1. targets可以是多个目标,使用空格对目标名进行分离
  2. prerequisities可以是多个依赖,使用空格对多个依赖进行分隔
  3. 每一个命令行,都必须以一个【tab键】字符开始,【tab】字符告诉make这一行是命令行
  4. 续行符【\】,可以将内容分开写到下一行,提高可读性

一个makefile的依赖示例:

依赖规则:

  1. 当目标对应的文件不存在,执行对应的命令
  2. 当依赖在时间上比目标更新,执行相应的命令(意思就是依赖文件有改动时,执行相应命令)
  3. 当依赖关系连续发生时,对比依赖链上的每一个目标

小技巧:
makefile中可以在命令前加上【@】符,作用为命令无回显!

2、makefile简单示例

下面是一个简单的makefile文件:


all : test
    @echo "make all"

test :
    @echo "make test"

输入:make命令,显示如下:
make test
make all

3、make编译简单示例

小技巧:
工程开发中,可以将最终可执行的目标文件名 和 all 同时作为makefile中的第一条规则的目标

hello.out all : main.o func.o
    gcc -o hello.out main.o func.o

下面给出一个:
makefile文件:

hello.out all : func.o main.o
    gcc -o hello.out func.o main.o

func.o : func.c
    gcc -o func.o -c func.c

main.o : main.c
    gcc -o main.o -c main.c

func.c文件:

#include "stdio.h"

void foo()
{
    printf("void foo() : hello makefile\n");
}

main.c文件:


extern void foo();

int main()
{
    foo();

    return 0;
}   

在Linux下输入make命令执行,结果如下:
gcc -o main.o -c main.c
gcc -o hello.out func.o main.o

运行编译所得的可执行文件:hello.out
输出结果为:
void foo() : hello makefile

以上程序比较简单,就不分析了,仅供学习复习使用!!!

4、总结

  1. makefile用于定义源文件之间的依赖关系
  2. makefile说明如何编译各个源文件并生成可执行文件
  3. makefile中的目标之间存在连续依赖的关系
  4. 依赖存在并且命令执行成功是目标完成的充要条件

想一起探讨以及获得各种学习资源加我(有我博客中写的代码的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题。

本学习记录完全来源于狄泰软件学院的相关课程,可以加我q:1126137994或者Q群:199546072 ,给你推荐更多学习课程。