我想通过将环境变量CPU_TYPE
及其值-mcpu=603
作为命令行参数传递给该makefile来调用makefile。我正在输入以下命令
make -f make_file CPU_TYPE=-mcpu=603
但由于环境变量值具有=
符号,因此给定错误。如何在环境值中转义这个相等的符号。
注意:我无法在make_file
内添加此环境变量或任何其他变量。我只能将它作为命令行传递。
答案 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。如果有这样的限制,那将是一件麻烦事。
但是,我能够做到:
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}}