linux – Bash片段在makefile中不起作用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – Bash片段在makefile中不起作用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1308字,纯文字阅读大概需要2分钟。
内容图文
![linux – Bash片段在makefile中不起作用](/upload/InfoBanner/zyjiaocheng/962/f24e0401dc3540f18ff57c79be448475.jpg)
我有一个版本文件verfile,其中包含以下版本字符串
V1.1.2
在Makefile中我打算读取这个版本的字符串,
所以我写了Makefile如下,
filepath := $(PWD)
versionfile := $(filepath)/verfile
all:
cat $(versionfile)
version=$(shell cat $(versionfile))
echo "version=$(version)"
现在,当我运行make文件时,我得到了以下输出
cat /home/ubuntu/ankur/verfile
v1.1.2
version=v1.1.2
echo "version="
version=
所以我无法在变量中存储版本字符串并在以后使用它,
我不确定我做错了什么?
有什么建议/指针吗?
在阅读了“Didier Trosset”的回答后,我改变了我的makefile,如下所示,
filepath := $(PWD)
versionfile := $(filepath)/verfile
myversion := ""
all:
ifeq ($(wildcard $(versionfile)),)
all:
echo "File not present"
else
all: myversion = $(shell cat $(versionfile))
endif
all:
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)/verfile
all:
cat $(versionfile)
(version=$(shell cat $(versionfile)); echo "version=$$version")
内容总结
以上是互联网集市为您收集整理的linux – Bash片段在makefile中不起作用全部内容,希望文章能够帮你解决linux – Bash片段在makefile中不起作用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。