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)