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

我有一个版本文件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")

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...