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

简介: Makefile在Linux下使用非常常见,这篇就介绍Linux下Makefile基本使用。命令行的make命令支持解析makefile和Makefile文件。如果我们编写的规则文件不是makefile或者Makefile文件,那么需要使用-f选项指定。

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
目录
相关文章
|
11天前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
46 3
|
11天前
|
监控 安全 Linux
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景
在 Linux 系统中,网络管理是重要任务。本文介绍了常用的网络命令及其适用场景,包括 ping(测试连通性)、traceroute(跟踪路由路径)、netstat(显示网络连接信息)、nmap(网络扫描)、ifconfig 和 ip(网络接口配置)。掌握这些命令有助于高效诊断和解决网络问题,保障网络稳定运行。
35 2
|
5天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
13 3
|
11天前
|
安全 网络协议 Linux
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。
本文详细介绍了 Linux 系统中 ping 命令的使用方法和技巧,涵盖基本用法、高级用法、实际应用案例及注意事项。通过掌握 ping 命令,读者可以轻松测试网络连通性、诊断网络问题并提升网络管理能力。
42 3
|
14天前
|
安全 Linux 数据安全/隐私保护
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。
在 Linux 系统中,查找文件所有者是系统管理和安全审计的重要技能。本文介绍了使用 `ls -l` 和 `stat` 命令查找文件所有者的基本方法,以及通过文件路径、通配符和结合其他命令的高级技巧。还提供了实际案例分析和注意事项,帮助读者更好地掌握这一操作。
33 6
|
14天前
|
Linux
在 Linux 系统中,`find` 命令是一个强大的文件查找工具
在 Linux 系统中,`find` 命令是一个强大的文件查找工具。本文详细介绍了 `find` 命令的基本语法、常用选项和具体应用示例,帮助用户快速掌握如何根据文件名、类型、大小、修改时间等条件查找文件,并展示了如何结合逻辑运算符、正则表达式和排除特定目录等高级用法。
45 6
|
15天前
|
监控 网络协议 算法
Linux内核优化:提升系统性能与稳定性的策略####
本文深入探讨了Linux操作系统内核的优化策略,旨在通过一系列技术手段和最佳实践,显著提升系统的性能、响应速度及稳定性。文章首先概述了Linux内核的核心组件及其在系统中的作用,随后详细阐述了内存管理、进程调度、文件系统优化、网络栈调整及并发控制等关键领域的优化方法。通过实际案例分析,展示了这些优化措施如何有效减少延迟、提高吞吐量,并增强系统的整体健壮性。最终,文章强调了持续监控、定期更新及合理配置对于维持Linux系统长期高效运行的重要性。 ####
|
6月前
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
1800 0
|
6月前
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
239 0
|
1月前
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
下一篇
无影云桌面