18.make中的路径搜索(下)

目录

 

1.问题一:

2.下面的项目中会选择哪一个文件进行编译?

3.实验结论

4.问题二

5.下面的项目中会选择哪一个文件进行编译?

6.实验结论

7.问题三

8.下面的项目中将如何生成可执行程序?

9.实验结论

10.问题

11.解决方案

12.工程项目中的几点建议


1.问题一:

当VPATH和vpath同时出现时,make会如何处理?

2.下面的项目中会选择哪一个文件进行编译?

3.实验结论

  • make首先在当前文件夹搜索需要的文件
  • 如果失败:

             make优先在vpath指定的文件夹中搜索目标文件

             当vpath搜索失败时,转而搜索VPATH指定的文件夹

将src2里面的fun.c重命名为fun.cpp

下面的这种情况我没测试出来:(当然也用可能是环境不一样导致的)

将src1也改为fun.cpp,先去vpath找,再去VPATH找,没找到,make就会使用隐士规则:可以找有没有.cpp,首先在当前目录下找,没找到在去vpath下找,makefile中vpath指定的是.c,没有指定.cpp去哪里找,又去VPATH下面找,结果找到了,然后就通过g++编译,但是隐士规则又没有指定去哪里找.h,所以报错找不到.h文件

我觉得应该是makefile中根本就没有定义.cpp去哪里找,所以直接是报找不到.c文件,这是我测试出来的结果。问题二中视频就是这样的情况。

4.问题二

当使用vpath对同一个Pattern指定多个文件夹时,make会如何处理?

5.下面的项目中会选择哪一个文件进行编译?

6.实验结论

  • make首先在当前文件夹搜索需要的文件
  • 如果失败

        make以自上而下的顺序搜索vpath指定文件夹

        当找到目标文件搜索结束

7.问题三

通过VPATH指定搜索路径后,make如何决定目标文件的最终位置?

8.下面的项目中将如何生成可执行程序?

9.实验结论

  • 当app.out完全不存在:

             make在当前文件下创建app.out

  • 当src文件夹中存在app.out

         所有目标和依赖的新旧关系不变,make不会重新创建app.out

         当前依赖文件被更新,make在当前文件夹下创建app.out

把生成的app.out移到src目录,在make

修改以下src/func.c

因make对文件路径的处理是非常弱的,所以经常会做出错误决定。

10.问题

当依赖改变时,如何使得src下的app.out被更新?

11.解决方案

  • 使用GPATH特殊变量指定目标文件夹
  • GPATH:=src

             当app.out完全不存在

                     make默认在当前文件夹创建app.out

             当app.out存在于src,且依赖文件被更新

                     make在src中创建app.out

将app.out移到src中我们改下func.c

12.工程项目中的几点建议

  • 尽量使用vpath为不同文件指定搜索路径
  • 不要在源码文件夹中生成目标文件
  • 为编译得到的结果创建独立的文件夹避免VPATH和GPATH特殊变量的使用

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值