如何使用 gnuwin32 Makefile 执行 powershell/cmd 命令?

JFF*_*IGK 4 windows powershell makefile gnu-make

我尝试使用 curl、rm 等命令,使用以下 makefile 处理器在 Windows 中的 makefiles 中启动:http : //gnuwin32.sourceforge.net/packages/make.htm

这似乎是不可能的,而我似乎对命令非常有限。有哪些方法可以扩展我的命令集?

我将不胜感激任何帮助。谢谢

mkl*_*nt0 6

如果您对仅适用Windows 的解决方案感到满意,则可以powershell.exe直接从您的调用Makefile,如您的回答

但是,我强烈建议避免使用类似 Unix 的 PowerShell别名,例如curlforInvoke-WebRequestrmfor Remove-Item,因为虽然它们的目的在抽象上相似,但它们的语法通常非常不同。只需使用 PowerShell 的本机命令名称即可避免歧义

请注意,您链接到Shell := <default shell executable>的 Windows 端口似乎忽略了using make


如果您想要跨平台兼容性

  • 或者:使用WSL,它为您提供了Linux发行版中,两者的选择make 标准的Unix实用程序本身可用-你那么既不需要cmd.exe也不PowerShell的。

  • 和/或:使用PowerShell Core并调用您的命令,如下所示:

    pwsh -noprofile -command <your command> 
    
    Run Code Online (Sandbox Code Playgroud)
    • 在 Windows 上使用 WSL 的跨平台解决方案中,您可以通过SHELL := pwsh -NoProfile在 顶部声明来简化调用MakeFile,之后您可以直接调用 PowerShell(核心)命令。

  • @Vroomfondel,是的,这种行为 - 一个[已知错误](https://github.com/PowerShell/PowerShell/issues/6291) - 是不幸的;解决方法是引用参数 (`'-DTMSTMP=1553521024.52'`)。还有另一个陷阱:嵌入双引号的参数未正确传递 - 请参阅[此答案](/sf/answers/4132581561/)。总的来说,PowerShell 远远优于其他 shell,但我同意此类错误需要尽早修复。 (2认同)