'How to fix "could not compile dependency :bcrypt_elixir" error on Windows?

I'm on Windows and I am trying to install the bcrypt_elixir module.

I get the following error:

$ mix phx.server
==> bcrypt_elixir
could not compile dependency :bcrypt_elixir, "mix compile" failed. You can recompile this dependency with "mix deps.compile bcrypt_elixir", update it with "mix deps.update bcrypt_elixir" or clean it with "mix deps.clean bcrypt_elixir"
** (Mix) "nmake" not found in the path. If you have set the MAKE environment variable,
please make sure it is correct.

Here is a terminal screenshot of the error:

Error

Here is my deps function from mix.exs:

defp deps do
    [
      {:phoenix, "~> 1.3.0"},
      {:phoenix_pubsub, "~> 1.0"},
      {:phoenix_ecto, "~> 3.2"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.10"},
      {:phoenix_live_reload, "~> 1.0", only: :dev},
      {:gettext, "~> 0.11"},
      {:cowboy, "~> 1.0"},
      {:comeonin, "~> 4.0"},
      {:elixir_make, "~> 0.4.1"},
      {:bcrypt_elixir, "~> 1.0"}
    ]
  end


Solution 1:[1]

I faced same problem during distillery setup with my elixir project.

Installing package resolve issue as shown below.

I found bcrypt_elixir need to install make and build-essential from Elixir Forum.

platform:- ubuntu

$ sudo apt install make

$ sudo apt-get install build-essential

Solution 2:[2]

bcrypt_elixir uses Windows' NMake (cf. bcrypt_elixir's Makefile.win).

It seems like you don't have NMake installed.

From NMake's documentation:

NMAKE is included when you install Visual Studio or the Visual C++ command-line build tools. It's not available separately.

So you need to download Visual Studio in order to get NMake. Then you should be able to compile bcrypt_elixir.

If you already have NMake, make sure nmake.exe is located under a directory from your path.

Solution 3:[3]

For Visual Studio 2019 (VS2019) :

cmd /K "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64

Solution 4:[4]

In windows 10, you must add NMAKE to your path enter image description here

After that you can run mix deps.compile until see message like this: enter image description here

After that you must run cmd as suggest from nmake:

cmd /K "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64

Run this command on cmd and run mix deps.compile normarly.

Solution 5:[5]

Actually looking at this a bit closer, since you're running Cygwin and trying to build bcrypt under Cygwin, nmake doesn't even enter into the question. You need to install make into Cygwin. Re-run the cygwin installer, select the Devel category and then under Devel look for make.

EDIT:

Ok, so if I had to guess I'd say either you need to

a.) Stop trying to build everything under the Cygwin prompt--if bcrypt_elixir is detecting that it's on Windows, it's going to look for nmake and nmake isn't part of Cygwin.

You didn't specify how you're looking for nmake but if I were you I'd try this from the C:\Program Files (x86) directory.

dir /s nmake.exe

Mind you run that from a Windows cmd prompt--it won't work from the Cygwin shell!

b.) Somehow set bcrypt_elixir to think it's on Linux so it looks for make (which is not the same as nmake).

Basically I think the simplest answer would be to try to run mix phx.server from a normal Windows cmd prompt and then go from there. Or if you need Linux, then install virtual box and put a Linux VM on the machine and proceed that way.

Solution 6:[6]

I found that, running on Windows, it was the latest version of erlang OTP, version 21, that was causing the problem. I uninstalled this version and went for version 20 (which installs erlang 9.3 and latest version of Elixir then looks for this version when being compiled) and then bcrypt_elixir compiled al

Solution 7:[7]

This answer is for anyone running elixir directly on Windows, and using VS Code with the ElixirLS extension. These instructions should work for other Visual Studio versions besides 2022, just change the path to vcvars64.bat.

  1. Install Visual Studio 2022.
  2. Use the Visual Studio Installer to install the optional Desktop Development with C++ workload. This contains native C/C++ build tools, including nmake.exe.
  3. Create a script in your home directory (C:\Users\UserName) ExVsCode.bat with the following (%1 is how you access the first command line argument, which will be the project directory):
cd %1
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat
code .
  1. When you want to work on an elixir project in VS Code, open a command prompt (CMD.exe), move to your home directory if you're not there already, and run ExVsCode.bat C:\Users\Username\PathToProject to open VS Code with all the build tools available to ElixirLS and the integrated terminal.

Credit to exqlite documentation for some of this.

Note: the original question may concern Cygwin, but many people will find this answer who are running elixir directly on Windows, and a closed question that doesn't mention Cygwin or WSL already points here.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 LowFieldTheory
Solution 4 Nguyen Tan Hung
Solution 5
Solution 6 luzaranza
Solution 7