VPATH与vpath的区别与应用

makefile vpath和VPATH小结 一:先看VPATH吧。 我们看到跟我一起学makefile当中的这段话。 注意点有两点, (1)make只会在当前的目录下去寻找依赖文件和目标文件。 (2)使用VPATH的方法,这点相对容易一些。 我们先看第一点是什么意思。 这是当前的目录结构。 makefile的第一版是这样写的。 #vpath %.c src #vpath %.h inc VPATH = src:inc target : main.o g_a.o g_b.o gcc -o target main.o g_a. 阅读详情
在Linux操作系统管理中,经常需要用到make命令来编译一些源代码。如内核升级,驱动程序安装等过程中,就需要用到这个命令。关于这个命令的使用技巧已经是老生常谈了。不过笔者这次要谈的是一个被大家所忽视的细节,即VPATH与vpath的区别,以及其在make命令中的应用。

  一、让系统自动取寻找文件到依赖关系。

  在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。可能这个项目有多个管理员参加,为此存放在系统的不同目录中。此时在编译的时候,就需要指定文件的依赖关系。虽然可以在配制文件中指定,但是这不是最好的方法。因为一旦源代码改变了,就需要去更改配制文件。所以我们需要寻求一种更加简便的、更加灵活的方法。在Linux操作系统中,这个需求很容易实现。因为可以给make命令指定路径,然其在相关目录中去自动寻找文件的依赖关系。如此的话,只要存放源代码的目录没有改变,则就不用更改配制文件。所以采取这宗方法的话,相对来说可以简化make命令的编译工作。

  二、通过VPATH来定义查找的路径。

  在Linux操作系统中,有一个PATH环境变量。当用户输入一个命令时,操作系统会现在这个环境变量指定的路径中查找命令。如果找不到的话,就会提示错误信息。在make命令中,也有一个类似参数,叫做VPATH。这个变量就是用来指定make命令查找的路径。如果用户没有指定这个VPATH便量,则make命令只会在当前目录中去查找依赖文件和目标文件。但是如果用户定义了这个变量,则这个命令首先会在当前的目录中查找依赖文件和目标文件。如果在当前目录下找不到的话,则还会自动从VPATH变量定义的路径中去查找。

  在这个变量中,可以定义多个路径。这个变量的定义规则根PATH环境变量的定义规则有相同的地方,也有不同的地方。相同的地方是可以同时定义多个路径,而且路径之间都是利用英文状态下的冒号进行分割。两者的差异也很大。如在定义PATH变量的时候,要求采用的是决定路径。而在定义VPATH变量时,即可以采用决定路径,也可以采用相对路径。如../source,这个目录的定义方法(采用了相对路径)在定义PATH环境变量的时候,是不允许的。但是在这里定义VPATH变量的时候,确是允许的。所以在使用这个变量的时候,这个小细节需要注意。因为采用相对路径来表示的时候,相对来说要简便一点。而且将整个大的文件夹移动到另外一个位置上,原先定义的相对路径仍然有效。为此在能够使用相对路径来表示的,笔者还是建议大家使用相对路径。

  三、通过vpath来定义查找的路径与匹配的模式。

  利用VPATH变量来定义路径,大家可以看到其只是定义了一个查找的路径,而没有定义匹配的文件。如在某个目录中,除了源代码文件之外,还有不少的说明文档。如果在查找的时候,将所有的文件都判断一遍(包括一些说明文档),那无疑会增加系统编译的时间。为此有时候,系统管理员不仅需要指定make命令查找的路径,而且还需要指定匹配的模式。即从符号哪些条件的文件中去查找。最常见的就是指定文件到扩展名。如此查找起来比较具有针对性,这个编译的速度也会提快许多。如现在系统管理员希望make命令查找指定路径下的以.h结尾的文件。要实现这个需求,就需要用到另一个变量vpath。注意这里是小写,跟上面那个大写的VPATH虽然在功能上相似,不过功能要比其强一点。

  这个vpath变量与VPATH变量很相似,也都是用来指定make命令查找文件依赖关系的目录。不过这个变量更加的灵活。因为其除了可以指定文件查找的目录之外,还可以设置所匹配的模式。根据所带参数的不同,这个命令主要用来完成三项工作。

  一是什么参数都不带的情况下,就是一个vpath光棍司令,并不是表示采用当前的vpath变量。而是指清除所有已经设置好了的文件搜索目录。注意其清除vpath命令所设置的搜索路径,而不影响VPATH变量所设置的查找路径。系统管理员不要被它们的外表所蒙骗了。只要记住它们两个是不同的变量,虽然名字相同。

  二是带一个参数pattern,如vpath %.h。此时系统会清除符合模式的文件的搜索路径。如现在系统管理员可能会同时建立多个搜索策略,如.c、.h等等。而通过这种形式就只会删除符合模式的搜索路径。而不会影响到其它模式的搜索路径。

  三是带两个参数,如vpath %.h ..(这个命令表示在上级目录中查找.h文件)。两个参数(匹配模式与文件的搜索路径)都带齐的话,就表示在指定的目录中按规定的模式进行查找。不过需要注意的是,这里一个模式最好对应一条语句。也就是说,在一个vpath语句中定义一个匹配模式。如果要定义多个匹配模式的话,此时最好的办法是连续使用vpath语句来定义,以指定不同的搜索策略。不过需要注意的是,如果模式相同,第二次定义的时候就会更新原有的定义。也即是说,两者的关系是替换,而不是追加。为此同一个模式,如果需要在多个路径中查找的话,那么要么在一条语句中定义多个路径,要么就是将它们复制到同一个文件夹中。一般最好将同一个模式的文件复制到同一个文件夹里,以方便管理。除非特别复杂的项目,才根据用途或者模块将它们分文件夹保存。
不过在RedHat Linux系统中有点区别。在这个版本地Linux操作系统中,可以相同模式的情况下定义多个路径。如vpath %.h all、vpath %.h bll 、vpath %.h cll等等。此时后面对定义不会覆盖前面的定义。即三个语句是各自独立的,三个语句定义的变量都有效。当系统查找.h结尾的文件时,会根据vpaht变量定义的时间顺序来查找。即先查找文件夹all,然后再查找bll,最后再查找cll。如果三个目录中有一个相同的文件,那么make命令就会以第一个目录中的文件为准。

  从以上的分析中可以看出,两个变量vpath与VPATH 是两个不同的变量。其功能相似,都可以在寻找文件依赖关系时指定查找的路径。但是vpath其功能稍微强一点,可以按模式来查找,即更进一步的进行细分。为此,用户可以根据文件的多少、项目规模的大小来确定使用VPATH还是采用vpath。

  四、使用这两个变量的注意事项。

  在使用这个两个变量时,需要注意在变量中不用指定当前目录。在定义PATH环境变量中,大家可以看到其最后还加上了当前目录(.表示当前目录)。但是在定义这两个变量的时候,却不需要加上。因为其默认情况下,会先从当前目录下查找。只有当前目录下找不到对应的文件时,才会从这两个变量指定的路径中去查找。在存在多个路径的时候,其查找的时候是按照路径先后定义的顺序来的。为此笔者要特别体系功能,PATH环境变量是把当前目录放在最后查找,而VPATH与vpath则是当前目录优先的。

  其次,对于VPATH与vpath两个变量来说,是可以采用相对路径来表示搜索路径的。而且,无论从便利性还是从移植性来讲,采用相对路径会更加的合适一点。不过这也不是绝对的。需要根据项目实际的情况与用户的操作习惯来定。不过从笔者的个人倾向来说,还是喜欢采用相对路径。同时用户需要牢记的一点是,在定义PATH环境变量的时候,是不能够采用相对路径的,必须采用绝对路径。

  最后就是要注意这个两个变量的大小写。如果要在查找的过程中匹配模式话,那么就要采用小写的vpath,否则的话,则要采用大写的VPATH。如果张冠李戴的话,则可能会产生一些不利的影响。Make命令是系统管理员必须要掌握的一个源代码编译命令。因为不仅仅在编写应用程序的时候需要用到,有时候在对内核进行升级的时候,也需要用到这个命令。所以无论是程序员还是管理员,对于这个命令都要有很深的了解。


====

http://www.xxlinux.com/linux/article/accidence/technique/20090721/17261.html


【makefile】Makefile VPATH和vpath的使用 Date:2017/12/31 Author: SoaringLee 目录 变量VPATH:指定Makefile中所有文件的搜索路径,包括目标文件和依赖文件; 关键字vpath:为不同类型的文件指定不同的搜索路径。 filter-out 变量VPATH:指定Makefile中所有文件的搜索路径,包括目标文件和依赖文件; 关键字vpath:为不同类型的文件指定不同的搜索路径。 1、vpath PATTERN DIRECTORIES 为符合模式“PATTERN”的文件指定搜索目录“DIRECTO. 阅读详情

相关推荐

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 764

Makefile VPATH和vpath

通常程序并不只存放在同一个目录下,例如: ├── include │   ├── bar.h │   └── foo.h ├── Makefile └── src     ├── bar.c     ├── foo.c     └── main.c 代码分别如下:

Tracy Mcgrady的专栏 1万+

ECMWF等大气数据批量下载(Python API)详细步骤

ECMWF等大气数据批量下载(Python API) 遥感方向做热红外温度反演,不可避免的要用到大气廓线数据,大气数据具有实时性,比如2018年9月1日的早上8点的影像,为了提高反演精度就需要用到时间上与其相差尽可能接近的大气数据,用于消除大气的影响,如果数据量较少我们可以查看影像的时间和空间范围进行下载,但是如果处理某个较大区域时可能涉及到大量的影像,如果一景一景对应查找去下载会很麻烦,因此针对大量数据的自动批量下载很有必要。本文根据 https://cds.climate.copernicus.eu/#

liuxiaojiangtobeno1的博客 1万+

Makefile 【03】— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文件的功能。常见的搜索的方法的主要有两种:在 Makefile 中可以这样写: 我们可以这样理解,把 dir 的值赋值给变量 VPATH,所以在执行 make 的时候会从 dir 目录下找我们需要的文件。当存在多个路径的时候我们可以这样写: 或者是 多个路径之间要使用空格或者是冒号隔开,表示在多个路径下搜索文件。搜索的顺序为我们书写时的顺序,应该

stephenbruce的博客 1572

利用dxflib读写cad文件

本篇主要在qt做一个例子读取cad文件数据,使用的开源库是dxflib。用到dxflib的DL_CreationAdapter,DL_Dxf。DL_Dxf是用来读取.dxf文件的类,DL_CreatinAdapter是一个容器,当DL_Dxf加载.dxf文件后,就会响应DL_CreationAdapter这个类,读取cad数据。我们来看看...

weixin_33759269的博客 1984

Ubuntu系统下USB无线网卡无法识别的解决方案

Realtek的USB设备可能是无线网卡、有线网卡、读卡器等,系统仅知道“这是Realtek的USB设备”,但不知道“如何将其作为无线网卡驱动”。通过以上步骤,RTL8812AU 芯片的 Edimax 无线网卡应能被 Ubuntu 识别并正常工作。Realtek等品牌的无线网卡可能被系统简单识别为"USB设备",但未匹配到对应的无线驱动,导致设备无法发挥网络功能。是系统识别了USB设备,却未正确加载无线网卡驱动。(前4位是厂商ID,后4位是产品ID),显示设备已识别,但网络管理工具无反应,

极地星辰 3459

makefile vpath变量

在讲vpath之前,我们首先了解以下makefile文件。 在类Unix系统中,当我们使用源码编译某个软件的时候,我们会使用confiure,make,make install这三个命令,其中cofigure生成makefile文件,make和make install编译和安装。makefile可以理解为一个脚本文件,使用make命令工具解析,其中定义了一系列的编译规则,如哪些文件需要先编译,哪...

weixin_30904593的博客 708

AIGC内容溯源技术:如何追踪AI生成内容的原始来源

本文旨在系统性地介绍AIGC内容溯源的技术体系,帮助读者理解如何追踪AI生成内容的来源。我们将覆盖从基础概念到前沿技术的完整知识链,包括但不限于数字水印、区块链存证、内容指纹等技术方案。文章将从AIGC的基本概念出发,逐步深入探讨各种溯源技术,分析其原理和实现,最后讨论实际应用和未来趋势。AIGC:AI Generated Content,人工智能生成内容内容溯源:追踪数字内容的创作、修改和传播历史数字水印:嵌入在数字内容中的不可见识别信息数字水印:隐藏在内容中的识别信息,像隐形墨水内容指纹。

SuperAGI2025 2070

【Makefile】VPATH 和 vpath 的区别与应用

【Makefile】VPATH 和 vpath 的区别与应用 3种寻找文件依赖路径的方法: 1.make工具自动获取 可以给make命令指定路径, 让其在相关路径下自动寻找文件的依赖关系。 2.通过VPATH来定义查找的路径 PATH(环境变量) VPATH(指定make命令的环境变量) 3.通过vpath来定义查找的路径 可以指定文件扩展名的方式在路径中查找文件。 vpath 使用方法及作用: 1.vpath 清除所有已经配置好的文件搜索目录 2.vpath pattern 清除符合模式的文件的搜索路径

weixin_45065888的博客 502

RK3568平台(camera篇) mipi csi接口

MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范。MIPI是差分串口传输,速度快,抗干扰。主流手机模组现在都是用MIPI传输,传输时使用4对差分信号传输图像数据和一对差分时钟信号;MIPI摄像头有三个电源:VDDIO(IO电源),AVDD(模拟电源),DVDD(内核数字电源),不同sensor模组的摄像头供电不同。

weixin_49303682的博客 5345

【局部规划模块轨迹优化算法】EM_planner最大期望滚动优化算法

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对EM_planner最大期望滚动优化算法做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 760

Makefile VPATH && vpath 区别

0. 写在前面编译C工程源码时,经常需要用到make命令。makefile文件中有个一容易被忽视的细节,即VPATH与vpath的区别,下面就来详细叙述这两者不同之处。1. 让系统自动取寻找文件到依赖关系。在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。此时在编译的时候,就需要指定文件的依赖关系。虽然可以在配制文件中指定,但是这不是最好的方法。因为一旦源代码改变了,就需要去更改配制

白杨的专栏 1万+

SAP_MM模块非限制库存转冻结库存

项目非限制 → 冻结事务码移动类型343影响库存不可用,不参与MRP常见用途质量问题封存、盘点冻结、待退货品通过本文,我们了解了 SAP 的[SAP_MM模块非限制库存转冻结库存]的基本概念和应用方法。希望这些信息能帮助您在实际工作中更好地使用 SAP 系统,提高工作效率和管理水平。更多SAP文章请点击更多SAP文章更新,大家一起学习进步!!!文章中如有错误。敬请指正!搜索公众号:SAP资料文库微信号:SPRO_PP时间:2025-10-14。

我小时候很黑的博客 584

VPATH和vpath

在Linux操作系统管理中,经常需要用到make命令来编译一些源代码。如内核升级,驱动程序安装等过程中,就需要用到这个命令。关于这个命令的使用技巧已经是老生常谈了。不过笔者这次要谈的是一个被大家所忽视的细节,即VPATH与vpath的区别,以及其在make命令中的应用。   一、让系统自动取寻找文件到依赖关系。  在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。可能这个项

mengcong2007_hunter的专栏 2969

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Makefile中VPATH与vpath

在Linux操作系统管理中,经常需要用到make命令来编译一些源代码。如内核升级,驱动程序安装等过程中,就需要用到这个命令。关于这个命令的使用技巧已经是老生常谈了。不过笔者这次要谈的是一个被大家所忽视的细节,即VPATH与vpath的区别,以及其在make命令中的应用。   一、让系统自动取寻找文件到依赖关系。   在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。可能

恋—恋风 635

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

make 文件中vpath 的使用

在Linux操作系统管理中,经常需要用到make命令来编译一些源代码。如内核升级,驱动程序安装等过程中,就需要用到这个命令。关于这个命令的使用技巧已经是老生常谈了。不过笔者这次要谈的是一个被大家所忽视的细节,即VPATH与vpath的区别,以及其在make命令中的应用。   一、让系统自动取寻找文件到依赖关系。   在利用make命令来编译一些大型项目时,往往会涉及到大量的源文件。可能

忘不烦的专栏 2661

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Nov 09

<br />abort: 异常退出,不做任何清理,会产生core dump。<br />exit: 程序的退出,值可由shell或命令解释器使用<br />return: 函数的返回 <br />只有main中exit 才和 return 相当。<br /> <br />exit 在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。<br /> <br />×××××××××××××××××××××××××××××××××××××××××××××××××××<br

站着编程 656

简单的makefile语法介绍

makefile语法 special variables特殊变量 资料 Archive file makefile中的规则 例子: foo.o : foo.c defs.h cc -c -g foo.c 会去比较foo.o新还是foo.c和defs.h新,如果是后者,就会执行第二行的语句,更新foo.o 规则的语法格式 targets : prerequisites ...

lhkwqy的博客 394

makefile知识再整理(超详细)

makefile知识再整理(超详细)

河海大学研究生在读的学习笔记 1709

Makefile整理笔记

1.隐晦规则(自动推导): 指定一个目标为.o文件时后面的依赖列表自动会添加本身的.c文件 即: command.o : command.c defs.h command.h 与command.o : defs.h command.h等价 表示command.o目标由头文件defs.h command.h和command.c生成 2. .PHONY : clean作用: eg: $ cat -n...

nswcszmdfj的博客 533

Makefile 札记

目标 基础语法、变量、分支判断、头文件依赖、隐含规则、自动化变量、模式规则、函数 一个典型的例子 gcc -o hell hello_main.c hello_func/hello_func.c -I ./hello_func/ 使用这个例子基本上就可以编译所有的工程了,哈哈哈 在依赖后面加上 -I,就可以指明被依赖的头文件的路径了 散点 关于 .PHONY 只要我们不期待生成目标文件,就应该把它定义成伪目标 定义为伪目标,可以保证目标总是会被执行,而不是先检查更新再执行 比如如果代码中不写“.PHON

系统!内核! 885

GNU Make基础篇

本文介绍了GNU Make的基本概念和makefile的编写规则。makefile用于定义编译和链接的依赖关系,通过规则指定目标文件、依赖文件和生成命令。文章详细讲解了makefile的框架、示例、工作方式、书写规则、通配符使用、文件搜寻、伪目标、多目标、静态模式以及自动生成依赖性的方法。通过这些内容,读者可以掌握如何编写和使用makefile来管理项目的编译过程。

2302_79616021的博客 108

【Makefile 专家之路 | 基础篇】03. 规矩方圆:书写规则详解(通配符、文件搜索与伪目标)

本文介绍了Makefile中的核心技巧:1)通配符(*和%)用于文件匹配;2)VPATH和vpath实现文件搜索路径;3).PHONY声明伪目标避免误判;4)多目标处理与静态模式。特别针对Android开发场景,指出AOSP中大量使用伪目标触发复杂构建流程,并提醒注意路径处理可能导致的版本冲突问题。文章还强调了续行符的使用规范,最后提出两个思考题检验学习效果,涉及clean目标失效原因和模式规则的正确写法。

xiaohaha123258的博客 384

二、写规则(Rules)

本篇文章是《GNU Make》官方文档的第四章—Writing Rules的学习笔记。

xiaobingshidabing的博客 2205
上一篇: 一步一步教你怎么编译GNU ARM GCC 交叉编译器 arm-none-eabi-gcc
下一篇: 串口公头(九针)母头(九孔)对应接口
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值