linux – Bash片段在makefile中不起作用

linux – Bash片段在makefile中不起作用,第1张

概述我有一个版本文件verfile,其中包含以下版本字符串 V1.1.2 在Makefile中我打算读取这个版本的字符串, 所以我写了Makefile如下, filepath := $(PWD)versionfile := $(filepath)/verfileall: cat $(versionfile) version @H_502_0@ @H_502_0@ 我有一个版本文件verfile,其中包含以下版本字符串
V1.1.2

在Makefile中我打算读取这个版本的字符串,
所以我写了Makefile如下,

filepath        :=      $(PWD)versionfile     :=      $(filepath)/verfileall:        cat $(versionfile)        version=$(shell cat $(versionfile))        echo "version=$(version)"

现在,当我运行make文件时,我得到了以下输出

cat /home/ubuntu/ankur/verfilev1.1.2version=v1.1.2echo "version="version=

所以我无法在变量中存储版本字符串并在以后使用它,
我不确定我做错了什么?

有什么建议/指针吗?

在阅读了“DIDIEr Trosset”的回答后,我改变了我的makefile,如下所示,

filepath        :=      $(PWD)versionfile     :=      $(filepath)/verfilemyversion       :=      ""all:ifeq ($(wildcard $(versionfile)),)all:        echo "file not present"elseall: myversion = $(shell cat $(versionfile))endifall:        echo "myversion = $(myversion)"

以下是输出

echo "myversion = v1.1.2"myversion = v1.1.2
解决方法 你有两个问题.首先要使用bash(而不是make)扩展你需要使用$$版本(或$${version})的变量.通过这个Make首先将$$翻译成$,然后bash将看到$version(或${version}).
其次,规则中的每一行都将作为一个单独的命令执行,所以为了让它们通过环境变量进行交互,你必须将它们放入一个公共的子shell中,用paranthesis括起来.

filepath        :=      $(PWD)versionfile     :=      $(filepath)/verfileall:    cat $(versionfile)    (version=$(shell cat $(versionfile)); echo "version=$$version")
@H_502_0@ 总结

以上是内存溢出为你收集整理的linux – Bash片段在makefile中不起作用全部内容,希望文章能够帮你解决linux – Bash片段在makefile中不起作用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1021336.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存