写点什么

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

作者:DS小龙哥
  • 2022 年 2 月 11 日
  • 本文字数:1148 字

    阅读完需:约 4 分钟

1. Makefile 基本使用

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


[wbyq@wbyq linux_c]$ make -f  <规则文件>
复制代码


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



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


 app:app.c     gcc app.c -o app
复制代码


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


    gcc  app.c -o app               
复制代码


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

2. make 指定目标执行

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



[wbyq@wbyq linux_c]$ makepwd/mnt/hgfs/linux-share-dir/linux_c[wbyq@wbyq linux_c]$ make app2lsa.out  app.c  Makefile  makefile_1234567  sum[wbyq@wbyq linux_c]$ make app3touch 123.ctouch 456.c[wbyq@wbyq linux_c]$ make app4rm 123.crm 456.c[wbyq@wbyq linux_c]$ make app1 app2 app3 app4pwd/mnt/hgfs/linux-share-dir/linux_clsa.out  app.c  Makefile  makefile_1234567  sumtouch 123.ctouch 456.crm 123.crm 456.c[wbyq@wbyq linux_c]$
复制代码

3. 隐藏 makefile 文件执行命令

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


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

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



[wbyq@wbyq linux_c]$ lsapp.c  Makefile  sum.c  sum.h[wbyq@wbyq linux_c]$ make -ngcc sum.c -cgcc app.c -c    gcc sum.o app.o -o app[wbyq@wbyq linux_c]$ makegcc sum.c -cgcc app.c -c    gcc sum.o app.o -o app[wbyq@wbyq linux_c]$ ./appsum_val=300[wbyq@wbyq linux_c]$ 
复制代码

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

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


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

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



[wbyq@wbyq linux_c]$ lsapp.c  Makefile  sum.c  sum.h[wbyq@wbyq linux_c]$ make -ncc    -c -o app.o app.ccc    -c -o sum.o sum.cgcc app.o sum.o -o app[wbyq@wbyq linux_c]$ makecc    -c -o app.o app.ccc    -c -o sum.o sum.cgcc app.o sum.o -o app[wbyq@wbyq linux_c]$ makemake: “app”是最新的。[wbyq@wbyq linux_c]$ makecc    -c -o app.o app.ccc    -c -o sum.o sum.cgcc app.o sum.o -o app
复制代码

7. 特殊变量的使用


编写的Makefile文件:CC=gcc   #指定编译器VPATH=./main:./sum  #指定隐式推导时搜索的路径CFLAGS=-I ./sum  #指定编译器编译是自动增加的选项参数OBJ=app.o sum.o  #依赖文件app:$(OBJ)    $(CC) $^ -o $@.PHONY:clear #声明伪目标clear:    rm *.o app
复制代码


发布于: 刚刚阅读数: 2
用户头像

DS小龙哥

关注

之所以觉得累,是因为说的比做的多。 2022.01.06 加入

熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域

评论

发布
暂无评论
Linux系统-Makefile规则介绍、基本使用