【问题标题】:makefile: How to run a single command in WSLmakefile:如何在 WSL 中运行单个命令
【发布时间】:2021-03-14 09:00:51
【问题描述】:

我打算在安装了 WSL 的 Windows 上运行 make

通常,我可以在 CMD 或 Powershell 中运行 wsl date 以在 WSL 中临时运行单个命令,但我无法在 Makefile 中执行相同的操作。

我尝试使用普通的wsl date,它给出了

process_begin: CreateProcess(NLL, wsl date, ...) failed.
make (e=2): The system cannot find the file specified.

我尝试使用 $(wsl) date,它运行 CMD 版本 date,而不是预期的 Linux 版本。

有谁知道使它工作的正确方法?谢谢!


一个最小的例子:

##### Call the WSL to run a command
call-wsl:
    C:\Windows\System32\wsl.exe date

运行make call-wsl,它给出了

C:\Windows\System32\wsl.exe date
process_begin: CreateProcess(NULL, C:\Windows\System32\wsl.exe date, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [makefile:3: call-wsl] Error 2

【问题讨论】:

  • 我对wsl一无所知。但是使用$(wsl) 是行不通的,因为这只是一个make 变量引用:如果您没有将变量wsl 设置为任何值,那么它会像任何make 变量一样扩展为空字符串。 wsl 是一个程序,例如 wsl.batwsl.exewsl.com?还是其他什么神奇的东西?
  • @MadScientist C:\WINDOWS\system32\wsl.exe
  • 那个目录在你的路径上吗?如果您在 makefile 中使用完全限定的路径名​​,它会起作用吗?请显示有问题的最小 makefile、运行的 make 命令以及得到的输出(不仅仅是错误)。
  • 是的。 system32 是一个典型的位置,默认在 PATH 中。我添加的示例使用了完整路径,但它不起作用。
  • 您可以尝试使用正斜杠。如果这不起作用,我不知道。我想知道错误是否不是找不到wsl,而是找不到date。但我不知道为什么会这样。它似乎是关于 wsl 的特定内容(与 make 相关)。我不知道要让 wsl 工作可能需要什么特殊魔法(如果有的话)。

标签: windows makefile windows-subsystem-for-linux


【解决方案1】:

Chocolatey 安装的 GNU Make 是一个 32 位程序。所以我们必须使用C:\Windows\sysnative\wsl.exe才能正确调用wsl.exe

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多