linux – Bash片段在makefile中不起作用
发布时间:2020-12-13 23:54:31 所属栏目:Linux 来源:网络整理
导读:我有一个版本文件verfile,其中包含以下版本字符串 V1.1.2 在Makefile中我打算读取这个版本的字符串, 所以我写了Makefile如下, filepath := $(PWD)versionfile := $(filepath)/verfileall: cat $(versionfile) version=$(shell cat $(versionfile)) echo "ver
我有一个版本文件verfile,其中包含以下版本字符串
V1.1.2 在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") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |