gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:51:46 25 4
gpt4 key购买 nike

我有一个版本文件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(或 $${version})的变量。通过这个 Make 首先将 $$ 翻译成 $ 然后 bash 将看到 $version (或 ${version}).其次,规则中的每一行都将作为单独的命令执行,因此为了让它们通过环境变量进行交互,您必须将它们放入一个公共(public)子 shell 中,并用括号括起来。

filepath        :=      $(PWD)
versionfile := $(filepath)/verfile

all:
cat $(versionfile)
(version=$(shell cat $(versionfile)); echo "version=$$version")

关于linux - Bash 片段在 makefile 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36419436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com