2014-03-06 63 views
1

一个环境变量在一个makefile,我有以下几点:使用的GNU makefile文件SHELL变量

​​

这是在MS Windows。情况是makePATH(或直接调用)中,但可接受的shell(即sh.exe)不在PATH中。也不是全局修改PATH变量以包含sh.exe(Cygwin,msysgit和更多之间的潜在冲突太多)的选项。因此,make默认使用Windows cmd.exe命令处理器,这并不理想。

但是,设置除PATH以外的系统范围环境变量的选项。所以我有一个明智的想法,把一个路径放到包含sh.exe的目录中SOME_DIRECTORY,然后在makefile的SHELL变量中使用它。但它不工作了一段令人沮丧的原因:

make 
echo sh.exe 
sh.exe 

如果我用比SHELL任何其他变量和回声它,然后它打印预期的结果。但是,当然这并没有改变shell的预期效果。

我在这里错过了什么?我需要做什么才能使用具有自定义用户指定名称的环境变量(即不是SHELL,PATH等)影响make所使用的shell?

+0

不幸的是,在Windows上使用shell的行为很复杂,因为Windows没有像样的shell。在GNU make手册中有一些关于Windows特定行为的讨论:http://www.gnu.org/software/make/manual/html_node/Choosing-the-Shell.html如果这不能回答你的问题,我建议你在[email protected]邮件列表上询问,该邮件列表专门针对有关Windows上的GNU make的问题 - 很多人对此非常了解。 – MadScientist

+0

使用Cygwin make。 _Very_兼容和跨平台。 (例如,你的例子工作正常。) – bobbogo

回答

0

你正在使用哪种品牌? GNU make(gmake)3.82是最常见的,它应该以您期望的方式工作。正如MadScientist指出的那样,gmake在Windows和SHELL下的行为不同。

您应该可以将SHELL设置为现有可执行文件的完整路径,gmake将用它来执行命令。

但是:如果SHELL未设置,或者如果设置为不存在的文件,则gmake将使用值ComSpec(以大写字母)作为shell。

在您使用的测试路径中是否有exe文件?那么$(SOME_DIRECTORY)/sh是一个现有的exe? (请注意,您可以省略'.exe',gmake将为您提供,但该文件必须存在)