我有一个基于GNU Make的框架,我一直在Windows和Linux上使用它。在Windows上我会使用SHELL:=C:/windows/System32/WindowsPowerShell/v1.0/powershell.exe
而在Linux上我会使用SHELL:=/bin/bash
。
这一直很有效,直到我们/我开始在Windows上使用git-bash很多。当从git-bash调用make
时,迄今为止基于$(OS)
的if语句将包含Powershell特定的Makefile,因此将调用Powershell,其中包含来自git-bash的路径,例如: HOME=/c/Users/myusername
,Powershell不明白。
因此,我需要确定是否从git-bash或Powershell调用make
并根据用于调用make
的shell做正确的事(TM)。因此问题是:我如何可靠地确定是否从bash或Powershell调用make
?
目前我这样做
ifeq($(filter %.exe,$(SHELL)),)
但认为这是一个相当弱的检查。我可以做更复杂的测试吗?
只需检查变量的实际值。如果它是/bin/bash
你正在使用bash,否则PowerShell:
ifeq ($(SHELL),/bin/bash)
HOME := '/c/Users/myusername'
else
HOME := 'C:/Users/myusername'
endif