Linux系统-Makefile规则介绍、基本使用

举报
DS小龙哥 发表于 2021/12/08 09:01:51 2021/12/08
【摘要】 这篇文章介绍Linux下Makefile的基本规则、与基本的使用。

1. Makefile基本使用

命令行的make命令支持解析makefile和Makefile文件。
如果我们编写的规则文件不是makefile或者Makefile文件,那么需要使用-f选项指定。

[wbyq@wbyq linux_c]$ make -f  <规则文件>

Makefile文件内部是以目标作为单位执行规则顺序的。

image-20211208085444547

在Makefile文件里使用shell命令行的命令时,需要使用TAB键开头。

 app:app.c
     gcc app.c -o app

<目标文件名称>:<依赖文件>

    gcc  app.c -o app               

什么是依赖文件?
就是在生成这个目标之前,需要得到的文件。

2. make指定目标执行

Makefile文件里可以有多个目标文件,我们在命令行执行make命令默认执行Makefile文件里的第一个目标。如果需要执行指定的目标,需要在make命令后面加上执行的目标名称即可。

image-20211208085557380

[wbyq@wbyq linux_c]$ make
pwd
/mnt/hgfs/linux-share-dir/linux_c
[wbyq@wbyq linux_c]$ make app2
ls
a.out  app.c  Makefile  makefile_1234567  sum
[wbyq@wbyq linux_c]$ make app3
touch 123.c
touch 456.c
[wbyq@wbyq linux_c]$ make app4
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$ make app1 app2 app3 app4
pwd
/mnt/hgfs/linux-share-dir/linux_c
ls
a.out  app.c  Makefile  makefile_1234567  sum
touch 123.c
touch 456.c
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$

3. 隐藏makefile文件执行命令

方法1: make -s
方法2: 在执行的命令前面加上@符号

image-20211208085643457

4. 示例1: 编译一个简单的工程

使用显式规则编写Makefile文件,编译一个工程。

image-20211208085718496

[wbyq@wbyq linux_c]$ ls
app.c  Makefile  sum.c  sum.h
[wbyq@wbyq linux_c]$ make -n
gcc sum.c -c
gcc app.c -c    
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ make
gcc sum.c -c
gcc app.c -c    
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ ./app
sum_val=300
[wbyq@wbyq linux_c]$ 

5. 示例2: 编译一个简单的工程

使用自动化编译符号优化Makefile文件,编译一个工程。

image-20211208085806070

6. 示例3: 编译一个简单的工程

使用隐式规则编写Makefile文件,编译一个工程。

image-20211208085837917

[wbyq@wbyq linux_c]$ ls
app.c  Makefile  sum.c  sum.h
[wbyq@wbyq linux_c]$ make -n
cc    -c -o app.o app.c
cc    -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
cc    -c -o app.o app.c
cc    -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
make: “app”是最新的。
[wbyq@wbyq linux_c]$ make
cc    -c -o app.o app.c
cc    -c -o sum.o sum.c
gcc app.o sum.o -o app

7. 特殊变量的使用

image-20211208085915028

编写的Makefile文件:
CC=gcc   #指定编译器
VPATH=./main:./sum  #指定隐式推导时搜索的路径
CFLAGS=-I ./sum  #指定编译器编译是自动增加的选项参数
OBJ=app.o sum.o  #依赖文件
app:$(OBJ)
    $(CC) $^ -o $@
.PHONY:clear #声明伪目标
clear:
    rm *.o app
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。