makefile shell grep不';找不到我试图指定的文件

makefile shell grep不';找不到我试图指定的文件,makefile,Makefile,这种方法无法找到我认为我指定的文件 SHELL = /bin/bash PKG_NAME = test PKG_VERSION := $(shell grep -i '^version' $(PKG_NAME)/DESCRIPTION | cut -d ':' -f2 | cut -d ' ' -f2) 在shell本身中,grep-i'^version“test/DESCRIPTION | cut-d':'-f2 | cut-d'-f2会成功返回版本,例如0.4-7 但是,通过makefil

这种方法无法找到我认为我指定的文件

SHELL = /bin/bash
PKG_NAME = test
PKG_VERSION := $(shell grep -i '^version' $(PKG_NAME)/DESCRIPTION | cut -d ':' -f2 | cut -d ' ' -f2)
在shell本身中,
grep-i'^version“test/DESCRIPTION | cut-d':'-f2 | cut-d'-f2
会成功返回版本,例如
0.4-7

但是,通过makefile运行会返回:

grep: test: Is a directory
grep: /DESCRIPTION: No such file or directory
test
是一个目录,没错,但是
test/DESCRIPTION
确实存在,所以我猜
$(PKG\u NAME)/DESCRIPTION
不是组合文件名的正确方法


建议?谢谢。

该错误表示grep将
test
/DESCRIPTION
视为两个独立的参数。在PKG_名称分配行中是否有多余的空格,或者在
$(PKG_名称)
/DESCRIPTION
之间的
$(shell…
行中是否有错误的空格


作为一般规则,您可能希望开始在shell命令的参数周围加引号(例如,
“$(PKG\u NAME)/DESCRIPTION”
),以防止此类分词问题(尽管没有空格,您通常不会遇到此类问题)。

我明白您关于两个独立参数的观点。听起来好像不是把这两块粘在一起。但是,没有多余的空格,更改为“<代码>”$(PKG_NAME)/DESCRIPTION“会产生相同的错误。它不可能产生相同的错误。它是否会说
grep:“test:是一个目录
grep:/DESCRIPTION”:没有这样的文件或目录
或类似的东西?您确定正在运行正确的生成文件吗?如果您将SHELL设置为
bash-x
,您会得到什么?使用它给出的“$(PKG\u NAME)/DESCRIPTION:
grep:test/DESCRIPTION:没有这样的文件或目录
,并且在test和/之间似乎有一个空格。使用$(PKG_NAME)/它给出的描述:
grep:test:是一个目录grep:/DESCRIPTION:在单独的行中没有这样的文件或目录
;将shell设置为
bash-x
似乎不会改变任何东西。显然,我似乎看到了一个空格,但我确实没有看到或理解它。在
PKG_NAME=test
行上有一个尾随空格就可以了。我已经检查了尾随空格,它不可见,但是那里有一些不好的东西,一个不好的EOL或其他东西,因为重新键入它清除了它。非常感谢你!