gpt4 book ai didi

powershell - 将 Powershell 核心设置为 windows/linux 上的默认 GNU Make shell

转载 作者:行者123 更新时间:2023-12-02 23:17:23 29 4
gpt4 key购买 nike

在 Windows 上的 makefile 中。

使用以下版本:

PS C:\projects> make --version
GNU Make 4.1
Built for i686-w64-mingw32
Copyright (C) 1988-2014 Free Software Foundation, Inc.

我试图设置 SHELL := pwsh/ COMSPEC := pwsh并在没有显式 shell 指定的情况下运行命令:
# COMSPEC := pwsh -c
SHELL := pwsh -c

VAR=asdf/asdf

.PHONY: get_var

get_var:
@Write-Output $(VAR)

没有成功。我有一个错误:
PS C:\projects\makefile_factory> make -f .\fi.makefile get_var
process_begin: CreateProcess(NULL, Write-Output asdf/asdf, ...) failed.
make (e=2): ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.
.\fi.makefile:10: recipe for target 'get_var' failed
make: *** [get_var] Error 2

如果在命令中明确指定了 shell,它会起作用:
# COMSPEC := pwsh -c
# SHELL := pwsh -c

VAR=asdf/asdf

.PHONY: get_var

get_var:
@pwsh -c Write-Output $(VAR)

跑:
PS C:\projects\makefile_factory> make -f .\fi.makefile get_var
asdf/asdf

另外,我查看了 make documentation :

However, on MS-DOS and MS-Windows the value of SHELL in the environment is used, since on those systems most users do not set this variable, and therefore it is most likely set specifically to be used by make. On MS-DOS, if the setting of SHELL is not suitable for make, you can set the variable MAKESHELL to the shell that make should use; if set it will be used as the shell instead of the value of SHELL.



所以我试图设置环境变量 SHELL/MAKESHELL 没有结果:
PS C:\projects\makefile_factory> $env:SHELL
C:\Program Files\PowerShell\7\pwsh.exe
PS C:\projects\makefile_factory> $env:MAKESHELL
C:\Program Files\PowerShell\7\pwsh.exe
PS C:\projects\makefile_factory> make -f .\fi.makefile get_var
Write-Output asdf/asdf
process_begin: CreateProcess(NULL, Write-Output asdf/asdf, ...) failed.
make (e=2): ═х єфрхЄё  эрщЄш єърчрээ√щ Їрщы.
.\fi.makefile:9: recipe for target 'get_var' failed
make: *** [get_var] Error 2

那么,没有办法将 pwsh 指定为默认 shell 吗?

最佳答案

@raspy 说的是真的,但是,我找到了一个很棒的解决方法!
如果你看看这个 if statement right here你会注意到,如果 shellflags设置为除 -c 之外的其他内容或 -ce它将始终使用慢选项(这意味着它将始终通过 SHELL 执行,而不是直接执行二进制文件!🎉🎉)。幸运的是,我们可以设置 .SHELLFLAGS直接看these docs
无论如何,这意味着我们需要做的就是设置 .SHELLFLAGS除了 -c-ce ,例如我们可以使用 powershell -Command , 把它们联系在一起:

SHELL := pwsh
.SHELLFLAGS := -Command

VAR=asdf/asdf

.PHONY: get_var
get_var:
@Write-Output $(VAR)
或者,在我想要 Windows 上的 PowerShell.exe 和 Linux 上的默认 shell 的示例中:
ifeq ($(OS),Windows_NT)
SHELL := powershell.exe
.SHELLFLAGS := -NoProfile -Command
endif

test.txt:
echo "hello, world" > test.txt

test:
rm test.txt
干杯!

关于powershell - 将 Powershell 核心设置为 windows/linux 上的默认 GNU Make shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61754413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com