make *** 没有指明目标并且找不到 makefile。 停止。_Makefile目标文件搜索(VPATH和vpath)...

我们都知道一个工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件会被放到不同的目录下),所以按照之前的方式去编写 Makefile 会有问题。我们之前列举的例子,所有的源文件基本上都是存放在与 Makefile 相同的目录下。只要依赖的文件存在,并且依赖规则没有问题,执行 make命令整个工程就会按照对我们编写规则去编译,最终会重建目标文件。那如果需要的文件是存在于不同的路径下,在编译的时候要去怎么办呢(不改变工程的结构)?这就用到了 Makefile 中为我们提供的目录搜索文件的功能。常见的搜索的方法的主要有两种:一般搜索VPATH和选择搜索vpath。乍一看只是大小写的区别,其实两者在本质上也是不同的。VPATH 和 vpath 的区别:VPATH 是变量,更具体的说是环境变量,Makefile 中的一种特殊变量,使用时需要指定文件的路径;vpath 是关键字,按照模式搜索,也可以说成是选择搜索。搜索的时候不仅需要加上文件的路径,还需要加上相应限制的条件。

 VPATH的使用

在 Makefile 中可以这样写:

VPATH := src

我们可以这样理解,把 src 的值赋值给变量 VPATH,所以在执行 make 的时候会从 src 目录下找我们需要的文件。当存在多个路径的时候我们可以这样写:

VPATH := src car

或者是

VPATH := src:car

多个路径之间要使用空格或者是冒号隔开,表示在多个路径下搜索文件。搜索的顺序为我们书写时的顺序,拿上面的例子来说,我们应该先搜索 src 目录下的文件,再搜索 car 目录下的文件。

注意:无论你定义了多少路径,make 执行的时候会先搜索当前路径下的文件,当前目录下没有我们要找的文件,才去 VPATH 的路径中去寻找。如果当前目录下有我们要使用的文件,那么 make 就会使用我们当前目录下的文件。

实例:

VPATH=src car

test:test.o

gcc -o $@ $^

假设 test.c 文件没有在当前的目录而在当前文件的子目录 "src" 或者是 "car" 下,程序执行是没有问题的,但是生成的 test 的文件没有在定义的子目录文件中而是在当前的目录下,当然生成文件路径可以指定。

vpath的使用

学习了 VPATH的使用,我们再来了解一下关键字搜索 vpath 的使用,这种搜索方式一般被称作选择性搜索。使用上的区别我们可以这样理解:VPATH 是搜索路径下所有的文件,而 vpath 更像是添加了限制条件,会过滤出一部分再去寻找。 具体用法:

1) vpath PATTERN DIRECTORIES 
2) vpath PATTERN
3) vpath

( PATTERN:可以理解为要寻找的条件,DIRECTORIES:寻找的路径 )首先是用法一,命令格式如下:

vpath test.c src

可以这样理解,在 src 路径下搜索文件 test.c。多路径的书写规则如下:

vpath test.c src car         或者是         vpath test.c src : car

多路径的用法其实和 VPATH 差不多,都是使用空格或者是冒号分隔开,搜索路径的顺序是先 src 目录,然后是 car 目录。其次是用法二,命令格式如下:

vpath test.c

用法二的意思是清除符合文件 test.c 的搜索目录。最后是用法三,命令格式如下:

vpath

vpath 单独使的意思是清除所有已被设置的文件搜索路径。另外在使用 vpath 的时候,搜索的条件中可以包含模式字符“%”,这个符号的作用是匹配一个或者是多个字符,例如“%.c”表示搜索路径下所有的 .c 结尾的文件。如果搜索条件中没有包含“%" ,那么搜索的文件就是具体的文件名称。 使用什么样的搜索方法,主要是基于编译器的执行效率。使用 VPATH 的情况是前路径下的文件较少,或者是搜索的文件不能使用通配符表示,这些情况下使用VPATH最好。如果存在某个路径的文件特别的多或者是可以使用通配符表示的时候,就不建议使用 VPATH 这种方法,为什么呢?因为 VPATH 在去搜索文件的时没有限制条件,所以它回去检索这个目录下的所有文件,每一个文件都会进行对比,搜索和我们目录名相同的文件,不仅速度会很慢,而且效率会很低。我们在这种情况下就可以使用 vpath 搜索,它包含搜索条件的限制,搜索的时候只会从我们规定的条件中搜索目标,过滤掉不符合条件的文件,当然查找的时候也会比较的快。

bc213ed2a731a28c816165d2af67f740.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑设置访问苹果服务器未响应,苹果连接电脑没反应,教您苹果连接电脑没反应怎么解决...

但只要是电子设备,那就一定会出现问题,所以苹果手机也不能例外。不过小编我有想好解决的方法,并且我已经将解决苹果手机连接电脑没反应的方法写在了文章的后面,小伙伴们往下看即可。苹果手机作为手机品牌界的翘楚,它一…

Linux下netstat命令详解

一、介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。 二、输出…

hbase可视化工具_做数据可视化,三大热门BI工具试用总结

什么BI分析工具好用?今天通过3款BI产品Power BI、FineBI、亿信ABI为范例,进行对比分析。一、产品背景Power BI是微软的,14年15年开始初见苗头,之前主要是基于Excel的高级功能,包括Power Query,Power Pivot&…

IDEA Translation插件安装及设置鼠标悬浮提示的自动翻译

1、安装插件 Translation 2.设置鼠标悬浮提示 3.在代码界面鼠标悬停在方法上 就会自动翻译提示

在虚拟机中ftp服务器的配置,ftp服务器在虚拟机中配置文件

ftp服务器在虚拟机中配置文件 内容精选换一换由于主机中 /etc/ssh/sshd_config 配置文件中对服务器与客户端交互的活动心跳时间做出了限制,所以在一个ansible任务中如果在“规定时间”中主机没有任何响应则ssh服务断开(注:上述“规定时间”是指在/etc/ss…

@PostConstruct注解详解

简介 javaEE5引入了PostConstruct和PreDestroy两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作 使用场景 在项目中主要是在Servlet初始化之前加载一些缓存数据等 API使用说明 PostConstruct 注释用于在依赖关系注入完成之后需要执行…

用户密码到底要怎样存储?

作为互联网公司的信息安全从业人员经常要处理撞库扫号事件,产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密或者加密方式比较弱,导致黑客可以还原出原始的用户密码。 目前已经曝光的信息泄露事件至少上百起&#…

dateframe取某列数据_Python获取时序数据并进行可视化分析

更多精彩,请点击上方蓝字关注我们!1. 准备工作tushare是一个第三方财经数据接口包,需要安装包并完成注册。安装tushare包pip install tushare 为防恶意调用接口数据,官方()需要新用户完成注册、提高积分(例如达到200)、取得访问权…

Shiro 登录认证源码详解

Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证、授权管理、企业级会话管理和加密等功能,相比 Spring Security 来说要更加的简单。 本文主要介绍 Shiro 的登录认证(Authentication)功能,主要从 Sh…

中3d库后接负载_Nature子刊:近红外光交联水凝胶用于活体生物3D打印

由于打印精度高、速度快,光固化3D打印成为组织再生等医学研究的有利工具,然而由于现在光固化3D打印普遍采用波长较短的光源,对组织损害较大且穿透力不高,这大大限制生物体内3D打印的发展。最近,来自意大利帕多瓦大学的…

怎么看调用的接口_Hadoop RPC调用实例分析

以ClientProtocol接口中的rename RPC调用进行一次实例分析。rename方法在ClientProtocol接口中定义,它的两个参数是String类型的,不能直接通过网络传输。我们看谁实现了ClientProtocol接口并重写rename方法。看到是ClientNamenodeProtocolTranslatorPB这…

父子结构查询_Java面试准备(5)之数据结构与算法——红黑树

欢迎点赞评论关注~~~~~~~如上图,二叉查找树极端情况下可能会变成一个单链表,这种查询时间复杂度就变成O(n)了,红黑树在二叉查找树的基础上进行了自平衡。1.原理分析如上图,红黑树具有以下特征:1. 每个节点要么是黑色&a…

中海达数据怎么转rinex_cors账号网最新实战教程,中海达 F61 Plus RTK连接千寻cors账号的方法...

RTK在工程测量工作中越来越流行,在这股潮流中,中海达品牌的F61 Plus因为融合了中海达多年的成熟建站技术HD-CORS,在工程测量工作中也受到了很大欢迎。它可以配套各种cors账号使用,使用过程中只需一台RTK移动站即可进行数据采集、施…

Shiro之UsernamePasswordTokenRememberMeAuthenticationTokenAuthenticationToken

继承关系 先看一下三者的继承关系,会有一个比较清楚的认识 AuthenticationToken AuthenticationToken 用于收集用户提交的身份(如用户名)及凭据(如密码)。Shiro会调用CredentialsMatcher对象的doCredentialsMatch方法对…

华为手机滑动速度设置_华为手机打字速度慢?开启这个设置,一分钟就能打200字...

很多朋友都说自己的打字速度非常慢!每次使用手机聊天、记录工作事项大半天还没打一段字来。其实使用华为手机就能非常快速的码字,不管聊天还是工作,使用这个方法,一分钟就能打200字。1.聊天快速打字手机键盘因为体积的原因&#x…

SpringBoot 使用AOP功能

RPC,AOP都会用到代理,代理的技术有jdk的Proxy代理(必须实现接口),cglib(可以不实现接口,直接实现类),Javassist(jboss )而Spring boot本身也在方方面面使用了代理技术,在Spring中有两种动态代理方式,分别为…

cognos报表导出excel_有了这个报表工具,一键生成自定义的各种报表,还可以导出Excel...

EasyReport是一个简单易用的Web报表工具,它的主要功能是把SQL语句查询出的数据转换成报表页面, 同时支持表格的跨行(RowSpan)与跨列(ColSpan)配置。 同时它还支持报表Excel导出、图表显示及固定表头与左边列的功能。功能介绍本工具从数据库(MySQL,Oracle,SQLServer,…

java自定义注解实现日志功能

一、spring aop的通知类型 1、前置通知(Before):在连接点前执行,不会影响连接点的执行,除非抛异常; 2、后置通知(AfterReturning):在连接点正常执行完成后执行&#xff0…

java自定义注解annotation记录操作日志

说到注解我们平常用的可以说非常多啦,说几个常用的的注解 RestController Service Autowired 这些都是我们平常使用spring框架最常见的注解了,我们只知道它们非常好用,使用RestController 就能构建一个restful的控制器,Service 这个是我们常用…

数组concat_js 标准二维数组变一维数组的方法

问题:[[1, 1], [2, 3], [4, 5]] -> [1, 1, 2, 3, 4, 5]?方法一利用es5的arr.reduce(callback[, initialValue])实现var arr1 [[0, 1], [2, 3], [4, 5]]; var arr2 arr1.reduce(function (a, b) { return a.concat(b)} ); // arr2 [0, 1, 2, 3, 4, 5…