我在尝试将命令中的值分配给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)...
否,Makefile不以这种方式支持反引号。 Makefile不是Shell脚本,根本不与bash共享语法。