不支持反引号表示法吗?

问题描述 投票:0回答:1

场景

我在尝试将命令中的值分配给makefile中的变量时遇到了一些麻烦。使用反引号表示法似乎可以很好地工作,但是一旦我使用更现代的$(pwd)表示法,变量的值就什么也不返回。

$ cat Makefile
FOO=moo
BAR=$(pwd)
BAZ=`pwd`

all: foo bar baz

foo: 
    @echo foo:$(FOO)';'
bar:
    @echo bar:$(BAR)';'
baz:
    @echo baz:$(BAZ)';'
$ make all
foo:moo;
bar:;
baz:/home/mazunki;

如您所见,FOO和BAZ正常工作。但不是BAR。

问题

现在通过添加更多示例来看看我的问题。当您了解时,我正在跳过回声。

$ cat Makefile
SHELL=/bin/env bash

FOO=dog
BAR=$(pwd)
BAZ=`pwd`
QUZ=`$(FOO)`/cat
ZOT=`\`FOO\``/owl
BIM=`$(BAZ)`/rat
BAM=`\`BAZ\``/pig
BUM=`BUM`/fox

all: foo bar baz quz zot bim bam bum
# targets for all the things

$ make
foo:dog;
bar:;
baz:/home/mazunki;
bash: dog: command not found
quz:/cat;
bash: FOO: command not found
zot:/owl;
bim:pwd/rat;
bash: BAZ: command not found
bam:/pig;
bash: BAZ: command not found
bum:/fox;

我真的对BIM有希望。但是可悲的是,它只返回我想运行的命令。我尝试在其中添加另一层$()和/或``,但结果是输出为空。

我想要的输出是我在Bash中运行echo -n $(pwd)/rat会得到的结果。我所有经过测试的示例都不允许我这样做。我希望能够做到这一点,因为我用于前言变量的某些命令基于初始设置,例如:

# User settings
ROOT=`pwd`
SRCPATH=$(ROOT)/src/
OBJPATH=$(ROOT)/objects/

# Scripting
SRCFILES=`find $(SRCPATH) -name '*.ext' -printf '%p '`
OBJFILES=`find $(SRCPATH) -name '*.ext' -printf '$(OBJPATH)/%p ' | sed 's/^$(SRCPATH)/^$(OBJPATH)//g; s/.ext;/.obj;/g; s/;$//g'`

这看起来有点复杂,但是我这样做主要有两个原因:我希望它具有高度可配置性,而不必自己编辑命令,也因为我想学习如何正确制作Makefiles 。

方案我在尝试将命令中的值分配给makefile中的变量时遇到了一些麻烦。使用反引号表示法似乎可以正常工作,但是一旦我使用了更现代的$(pwd)...

bash makefile
1个回答
1
投票

否,Makefile不以这种方式支持反引号。 Makefile不是Shell脚本,根本不与bash共享语法。

© www.soinside.com 2019 - 2024. All rights reserved.