在GNU makefile SHELL变量中使用环境变量

时间:2014-03-06 22:21:44

标签: windows makefile gnu-make

在makefile中,我有以下内容:

SHELL = $(SOME_DIRECTORY)/sh

showme:
    echo $(SHELL)

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

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

make
echo sh.exe
sh.exe

如果我使用除SHELL以外的任何其他变量并回显它,则会打印出预期结果。但是当然这没有改变shell的预期效果。

我在这里缺少什么?如何使用自定义用户指定的名称(即不是SHELLPATH等)来生成具有make使用的shell的环境变量,我需要做什么?

1 个答案:

答案 0 :(得分:0)

你使用哪种制作? GNU make(gmake)3.82是最常见的,它应该以您期望的方式工作。正如MadScientist所指出的,gmake在Windows SHELL下的表现不同。

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

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

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