Makefile基础教程 6

本教程详细介绍了Makefile中的wildcard函数、VPATH和vpath的使用,以及文件路径保存方法。通过实验步骤展示了如何抓取源代码、使用wildcard匹配.c文件、利用VPATH和vpath指定搜索路径,并探讨了文件路径保存的规则。实验总结了这些功能的使用方法,适合有一定Makefile基础的学习者进行进阶学习。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

一、实验介绍--Makefile 规则进阶(2)

本次实验将介绍 makefile 中 wildcardVPATHvpathGPATH-lNAME 的使用方法及文件路径保存方法。

1.1 实验内容

  1. 函数 wildcard 的使用
  2. VPATH 和 vpath 的使用
  3. 文件路径的保存及 GPATH 的使用
  4. -lNAME 文件的使用

1.2 实验知识点

  1. 在变量定义或者函数引用时不能直接使用通配符,而要用 wildcard 函数来代替
  2. VPATH 变量可以指定依赖文件的搜索路径,使用空格或冒号将多个路径分开
  3. vpath关键字比 VPATH 更灵活,可以为符合模式匹配的文件指定搜索路径,还可以清除搜索路径
  4. make 的文件路径保存算法如下:

    1)在当前工作目录搜索目标文件,若不存在则执行目录搜索;

    2)依赖文件也使用同样的处理方式;

    3)决定目标是否需要重建时做出如下选择:

    3.1)不需要重建时规则中所有文件的完整路径名有效;

    3.2)需要重建时,目标的完整路径失效,目标在会在当前工作目录下重建,而非目录搜索时得到的目录,但依赖文件的完整路径依然有效;

  5. 若目标文件的完整路径存在于GPATH变量列表中,make 会使用完整路径来重建目标,而非当前工作目录
  6. 当出现 -lNAME 形式的文件名时,make会先查找 libNAME.so,文件不存在时查找libNAME.a文件,路径搜索顺序为:当前目录 > VPATH or vpath 指定目录 > /lib/ > /usr/lib/ > /usr/local/lib/
  7. -lNAME 被展开成libNAME.solibNAME.so 是由变量".LIBPATTERNS"指定的

1.3 实验环境

Ubuntu系统, GNU gcc工具,GNU make工具

1.4 适合人群

本课程难度为中等,适合已经初步了解 makefile 规则的学员进行学习。

1.5 代码获取

可以通过以下命令获取代码:

$ git clone https://github.com/darmac/make_example.git

二、实验原理

依据 makefile 的基本规则进行正反向实验,学习和理解规则的使用方式。

三、开发准备

进入实验楼课程即可。

四、项目文件结构

.├── gpath_code:用于测试 GPATH │   ├── main│   └── makefile├── lib_code:用于测试 -lNAME 的使用方法│   ├── lib│   │   ├── foo_dynamic.c│   │   └── foo_static.c│   ├── main.c│   └── makefile├── vpath_code:用于测试 VPATH 和 vpath│   ├── main.c│   ├── makefile│   └── vpath.mk└── wild_code:用于测试 wildcard 函数    ├── foo1.c    ├── foo1.h    ├── foo2.c    ├── foo2.h    ├── main.c    ├── makefile    └── pat_make.mk

五、实验步骤

5.1 函数 wildcard 的使用

5.1.1 抓取源代码

使用如下 cmd 获取 GitHub 源代码并进入相应章节:

cd ~/Code/git clone https://github.com/darmac/make_example.gitcd make_example/chapter5
5.1.2 wildcard 的使用时机

前面章节介绍了文件通配符的使用,在规则中通配符会被自动展开,但在变量定义和函数引用时,通配符将会失效。

此时如果需要使用通配符就要使用 wildcard 函数。

它的语法格式为:$(wildcard PATTERN...)

在 makefile 中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。

5.1.3 使用 wildcard 来匹配当前目录下所有的 .c 文件

此处我们用代码编译流程来进行测试,先进入 wild_code 目录:

cd wild_code

wild_code 目录下文件如下:

├── foo1.c├── foo1.h├── foo2.c├── foo2.h├── main.c└── makefile

foo1.c定义了 foo1() 函数,打印“Hello foo1!”foo2.c定义了foo2() 函数,打印“Hello foo2!”

main.c 依次调用 foo1() 和 foo2()。

makefile 文件内容如下:

#this is a makefile for wildcard code test.PHONY:all cleancode=$(wildcard *.c)aim=wildtest
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值