GNU make中'='符号的转义字符是什么?

时间:2011-11-02 15:33:22

标签: build makefile gnu

我想通过将环境变量CPU_TYPE及其值-mcpu=603作为命令行参数传递给该makefile来调用makefile。我正在输入以下命令

make -f make_file CPU_TYPE=-mcpu=603

但由于环境变量值具有=符号,因此给定错误。如何在环境值中转义这个相等的符号。

注意:我无法在make_file内添加此环境变量或任何其他变量。我只能将它作为命令行传递。

3 个答案:

答案 0 :(得分:4)

可能性不大

应该没有任何问题,但也许你正在与一个很少使用的shell功能相冲突。

如果在正在运行的shell中使用set -k,或使用sh -k运行shell,它会将任何看起来像环境变量的内容视为环境变量。

您可能已经知道除了C shell系列之外的shell可以通过在命令之前添加它来为单个命令设置环境变量:

PATH="/somewhere/else:$PATH" cmdname -opts file1 file2

命令本身可以看到修改后的环境; shell对cmdname的搜索不会改变。但是,在set -k生效的情况下,任何看起来像环境变量的内容都被视为一个:

cmdname -opts PATH="/somewhere/else:$PATH" file1 file2

您可以使用env作为命令对此进行验证。有合理的原因(例如dd命令)没有将此作为默认行为。

反对假设

根据这个假设,我不知道在环境值中反对'='的shell。如果有这样的限制,那将是一件麻烦事。

普通GNU Make是可以的

但是,我能够做到:

make CFLAGS='-Dxyz=pqr' progname

并且,在set -k生效的情况下,我也可以这样做:

make -e CFLAGS='-Dxyz=pqr' progname

在这两种情况下,编译都会通过命令行指定的值覆盖makefile中设置的内容。

make没有看到单引号;当然,它们会被shell移除。你可以完全省略它们,我得到相同的结果。我正在MacOS X上使用bash运行,但我希望在使用任何标准POSIX-ish shell(Bourne,Korn,Bash)的任何类Unix系统上都能获得相同的结果。

答案 1 :(得分:0)

答案 2 :(得分:-1)

我不确定是否有直接的方式来达到你想要的效果。

但也许您可以修改 Makefile ,以便通过例如CPU_TYPE设置make_file。读一个文件。您可以在CPU_TYPE=$(shell cat $(CPU_TYPE_FILE)) 中添加类似

的内容
my603.cputype

然后使用例如

创建文件echo '-mcpu=603' > my603.cputype
make -f make_file CPU_TYPE_FILE=my603.cputype

最后运行make as

{{1}}