2014-03-06 122 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將爲您提供,但該文件必須存在)