VScode mix.exs 错误 - 无法使用“make”编译

VScode mix.exs error - Could not compile with “make”

背景

我有一个 umbrella 应用程序,我正在使用烤盘为 windows 构建: https://github.com/bake-bake-bake/bakeware

我遵循了 windows 的正常设置:

choco install -y zstandard make mingw

我已经通过他们的官方网站安装程序安装了 elixir 和 erlang otp:

问题

我能够 运行 并正常执行所有操作,但是我的 VSCode 将我的 mix.exs 文件标记为一个巨大的红色错误块:

an exception was raised:
    ** (Mix.Error) Could not compile with "make" (exit status: 2).

        (mix 1.13.1) lib/mix.ex:515: Mix.raise/2
        (elixir_make 0.6.3) lib/mix/tasks/compile.make.ex:154: Mix.Tasks.Compile.ElixirMake.run/1
        (mix 1.13.1) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
        (mix 1.13.1) lib/mix/tasks/compile.all.ex:92: Mix.Tasks.Compile.All.run_compiler/2
        (mix 1.13.1) lib/mix/tasks/compile.all.ex:72: Mix.Tasks.Compile.All.compile/4
        (mix 1.13.1) lib/mix/tasks/compile.all.ex:59: Mix.Tasks.Compile.All.with_logger_app/2
        (mix 1.13.1) lib/mix/tasks/compile.all.ex:36: Mix.Tasks.Compile.All.run/1
        (mix 1.13.1) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3ElixirLS

问题

在 Bakeware 的页面中有一个部分:

Change the default MAKE environment variable used by elixir_make from nmake to make (set it permanently to get rid of the errors in VSCode)

elixir_make docs 说要将 mix.exs 中的 make_executable 设置为系统上安装的 make 命令。

然后在您的 shell 中设置 Windows Way (If you already set the environment variables but they aren't taking, you may need to restart your terminal or VS Code), or if you're using bash, you can put them in your .bash_profile as the bakeware docs 显示的环境变量。

命令提示符:

set MAKE=make
set CC=gcc

或 MinGW

export MAKE=make
export CC=gcc
mix release

回答

我以某种方式解决了这个问题。 Bakeware,依赖项,真的 喜欢 Powershell。但不是任何powershell。具有管理员权限的 powershell。 要消除警告,必须在 VSCode 处于 关闭 时执行以下步骤:

  1. 在管理员模式下打开Windows Powershell
  2. 设置$env:CC="gcc"
  3. 设置$env:MAKE="make"
  4. 设置 MIX_ENV 为某物。不一定非得是prod,但是由于powershell默认没有设置这个值,所以要自己手动设置。在 运行 测试之前,获取依赖项或任何东西。
  5. mix deps.get

此后如果还是出现死亡红墙,尝试删除你的.elixir_ls文件夹强制重试。 然后用code .

打开VSCode

希望它对你有用,对我也有用。 用任何其他终端尝试此操作将导致看到红色的死亡之墙。根据我的实验,powershell 是唯一有效的。