Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CMake on Windows

Tags:

c++

c

cmake

I am trying to run CMake on Windows, and I get the following error:

-- The C compiler identification is unknown CMake Error at CMakeLists.txt:3 (PROJECT):   The CMAKE_C_COMPILER:      cl    is not a full path and was not found in the PATH.    To use the NMake generator with Visual C++, cmake must be run from a shell   that can use the compiler cl from the command line.  This environment is   unable to invoke the cl compiler.  To fix this problem, run cmake from the   Visual Studio Command Prompt (vcvarsall.bat).    Tell CMake where to find the compiler by setting either the environment   variable "CC" or the CMake cache entry CMAKE_C_COMPILER to the full path to   the compiler, or to the compiler name if it is in the PATH. 

However my "CC" environment variable is set!

>>echo %CC% C:\Anaconda2\MinGW\x86_64-w64-mingw32\bin\gcc.exe 
like image 732
João Abrantes Avatar asked Mar 08 '16 14:03

João Abrantes


People also ask

Can you use CMake on Windows?

C++ CMake tools for Windows is installed as part of the Desktop development with C++ and Linux Development with C++ workloads. Both C++ CMake tools for Windows and Linux Development with C++ are required for cross-platform CMake development. For more information, see Install the C++ Linux workload in Visual Studio.

How do I run CMake on Windows 10?

Running CMake from the command line From the command line, cmake can be run as an interactive question and answer session or as a non-interactive program. To run in interactive mode, just pass the option “-i” to cmake. This will cause cmake to ask you to enter a value for each value in the cache file for the project.

What does CMake do in Windows?

Cmake allows to provide cross platform build files that would generate platform specific project/make files for particular compilation/platform. cmake . inside your project's directory on Windows platform,Cmake will generate all the necessary project/solution files ( . sln etc.).


1 Answers

Because CMake's error message is misleading here, I think it warrants a little more detailed answer.

In short, you ran into a chicken-and-egg kind of a problem.

CMake's compiler detection is mighty, but since - during the first try -

  • you didn't give any explicit generator to use with -G
  • it couldn't find a Visual Studio installed
  • it couldn't find any C/C++ compiler in your PATH environment
  • it couldn't find a CC environment variable defined with the full path to a compiler

It was defaulting to nmake.

Now here comes the problem: it does remember your implicit generator/compiler choice in it's variable cache (see CMAKE_GENERATOR in CMakeCache.txt). What is a very useful feature, if you have multiple compilers installed.

But if you then declare the CC environment variable - as the error message suggests - it's too late since your generator's choice was remembered in the first try.

I see two possible ways out of this:

  1. Overrule the generator choice by given the right one with cmake.exe -G "MinGW Makefiles" .. (as the answer linked by @Guillaume suggests)
  2. Delete your project's binary output directory (including CMakeCache.txt) and do cmake.exe .. after you added your compiler's bin folder to your PATH environment.

References

  • Running CMake on Windows
  • What is the default generator for CMake in Windows?
  • CMake error at CMakeLists.txt:30 (project): No CMAKE_C_COMPILER could be found
  • CMake: how to specify the version of Visual C++ to work with?
like image 86
Florian Avatar answered Sep 24 '22 11:09

Florian