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
    评论
Makefile,可以使用shell命令来执行一些外部的操作。例如,在Makefile定义一个目标,并使用shell命令来执行某个操作。下面是一个示例: ```makefile # 定义一个目标 all: # 使用shell命令执行某个操作 @echo "Hello, World!" @ls -l ``` 在上面的示例,我们定义了一个名为"all"的目标,并使用shell命令来执行"echo"和"ls"命令。当我们运行"make all"命令时,Makefile会执行这些shell命令,并输出结果。 另外,在Makefile也可以使用变量来存储shell命令的输出结果。例如,在Makefile定义一个变量,并使用shell命令来获取当前的日期和时间: ```makefile # 定义一个变量,并使用shell命令获取当前的日期和时间 DATETIME := $(shell date "+%Y-%m-%d %H:%M:%S") # 输出变量的值 all: @echo "当前的日期和时间是:$(DATETIME)" ``` 在上面的示例,我们使用了shell命令"date"来获取当前的日期和时间,并将其存储到变量"DATETIME"。然后,在目标"all",我们使用"echo"命令来输出变量"DATETIME"的值。 总结起来,Makefileshell命令可以用来执行外部的操作,获取输出结果,存储到变量,或者直接输出到终端。这样可以在Makefile实现更加灵活和复杂的构建逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Shell脚本——make命令Makefile文件](https://blog.csdn.net/twc829/article/details/72729799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值