Makefile: определите, есть ли bash или powershell - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть среда на основе GNU Make, которую я использую как в Windows, так и в Linux. В Windows я бы использовал SHELL:=C:/windows/System32/WindowsPowerShell/v1.0/powershell.exe, в то время как в Linux я бы использовал SHELL:=/bin/bash.

Это работало замечательно, пока мы не начали часто использовать git-bash в Windows. При вызове make из git-bash дословный оператор if на основе $(OS) будет включать в себя специфичный для Powershell Makefile, и в результате будут вызываться Powershell с путями из git-bash, например, HOME=/c/Users/myusername, который не понимает Powershell.

Следовательно, мне нужно определить, был ли вызван make из git-bash или Powershell, и правильно сделать (TM), исходя из того, какая оболочка использовалась для вызова make. Отсюда вопрос: как мне достоверно определить, был ли make вызван из bash или Powershell?

В настоящее время я делаю

ifeq($(filter %.exe,$(SHELL)),)

но думаю, что это довольно слабая проверка. Могу ли я сделать более сложный тест?

1 Ответ

0 голосов
/ 03 апреля 2019

Просто проверьте фактическое значение переменной.Если это /bin/bash, вы используете bash, иначе PowerShell:

ifeq ($(SHELL),/bin/bash)
    HOME := '/c/Users/myusername'
else
    HOME := 'C:/Users/myusername'
endif
...