Build '的转义字符是什么=';GNU制造中的符号?

Build '的转义字符是什么=';GNU制造中的符号?,build,makefile,gnu,Build,Makefile,Gnu,我想通过将环境变量CPU\u TYPE及其值-mcpu=603作为命令行参数传递给makefile来调用makefile。我正在输入下面的命令 make-f make\u文件CPU\u类型=-mcpu=603 但它的给定错误是因为环境变量值具有=符号。如何在环境值中转义此相等符号 注意:我无法在make\u文件中添加此环境变量或任何其他变量。我只能将其作为命令行代码传递。尝试\=而不是= 尝试\=而不是= 我不确定有没有直接的方法来实现你想要的 但也许您可以修改Makefile,使其通过读取文件

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

make-f make\u文件CPU\u类型=-mcpu=603

但它的给定错误是因为环境变量值具有
=
符号。如何在环境值中转义此相等符号


注意:我无法在
make\u文件中添加此环境变量或任何其他变量。我只能将其作为命令行代码传递。

尝试\=而不是=

尝试\=而不是=

我不确定有没有直接的方法来实现你想要的

但也许您可以修改Makefile,使其通过读取文件等方式设置
CPU\u类型。您可以在
make_文件中输入类似的内容

CPU_TYPE=$(shell cat $(CPU_TYPE_FILE))
然后创建一个文件
my603.cputype
,例如

echo '-mcpu=603' > my603.cputype
最后运行makeas

make -f make_file CPU_TYPE_FILE=my603.cputype

我不确定有没有直接的方法来实现你想要的

但也许您可以修改Makefile,使其通过读取文件等方式设置
CPU\u类型。您可以在
make_文件中输入类似的内容

CPU_TYPE=$(shell cat $(CPU_TYPE_FILE))
然后创建一个文件
my603.cputype
,例如

echo '-mcpu=603' > my603.cputype
最后运行makeas

make -f make_file CPU_TYPE_FILE=my603.cputype
不可能的可能性 这应该不会有任何问题,但可能您遇到了一个很少使用的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 CFLAGS='-Dxyz=pqr' progname
而且,在
set-k
生效的情况下,我还可以执行以下操作:

make -e CFLAGS='-Dxyz=pqr' progname
在这两种情况下,编译都将通过命令行指定的值作为覆盖makefile中设置的值

make
看不到单引号;当然,它们是通过外壳移除的。你完全可以忽略它们,我得到同样的结果。我在MacOS X上运行的是
bash
,但我希望在任何使用标准POSIX ish shell(Bourne、Korn、bash)的类Unix系统上都能得到相同的结果。

可能性不大 这应该不会有任何问题,但可能您遇到了一个很少使用的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 CFLAGS='-Dxyz=pqr' progname
而且,在
set-k
生效的情况下,我还可以执行以下操作:

make -e CFLAGS='-Dxyz=pqr' progname
在这两种情况下,编译都将通过命令行指定的值作为覆盖makefile中设置的值


make
看不到单引号;当然,它们是通过外壳移除的。你完全可以忽略它们,我得到同样的结果。我在MacOS X上运行的是
bash
,但在任何使用标准POSIX ish shell的类Unix系统上(Bourne、Korn、bash)都会得到相同的结果.

您可以通过引用它来对sh-k隐藏等号:
make'CFLAGS=-Dxyz=pqr'
make CFLAGS\=-Dxyz\=pqr
具有让参数正常由make而不是shell解释的预期效果。(至少对于Mac OS X上的bash 3.2.48)您可以通过引用它来对sh-k隐藏等号:
make'CFLAGS=-Dxyz=pqr'
make CFLAGS\=-Dxyz\=pqr
具有让参数由make而不是shell正常解释的预期效果。(至少在Mac OS X上使用bash 3.2.48)