makefile中的命令与普通的shell命令的区别

70 篇文章 0 订阅
37 篇文章 0 订阅

问题背景

今天在makefile中,遇到一个场景,依赖一个目标,需要cd到其他文件夹里面执行一个操作。简单来说,可以描述成这样:

    lbm_mtl_server_mock.so这个目标的生成,我需要去到相关的目录去执行一个make操作。

注:这里的LBM_MTL_SERVER_DIR=/workspace/branches/linux/pb_lbm/lbm_mtl_server

然后,就遇到了一个问题,就在本目录一直循环。遇到的情况如下:

问题分析

这里一直找不到头绪,为什么这里会陷入一个无限循环呢?从makefile的角度来分析这个问题。

依赖结构这样写,应该没有问题。注意到这里出错的情况下,每次都cd过去了,然后make的时候,又cd回原目录了。

初始怀疑:是不是cd没有成功?导致在当前目录下直接执行了 make,进而一直导致循环的产生。

问题验证

我们换种写法,我们直接把cd $(LBM_MTL_SERVER_DIR) && make试一下如何?

实验结果证实,直接写成cd $(LBM_MTL_SERVER_DIR) && make,就成功进入到了LBM_MTL_SERVER_DIR目标目录,并执行了make。这是神马原因?难道这里的shell执行还不一样,分两行写还不同了?

makefile中的命令

到了gun的makefile官网,找到makefile官方手册。终于找到了问题的真相。

在makefile中的命令,它采用的是每行使用独立的shell进程来执行,每一行之间没有关系。读到这里就明白了,如果想要执行一系列动作,那你必须把命令写到同一行中,否则就是由不同的shell子进程来执行。

这里把原文贴出来:

这里把gun_make的文档上传到附件,大家感兴趣可以进行阅读。gun_make.pdf


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值