CMake Ошибка: не удалось выполнить make на Winows

Я получаю ошибки при попытке построить проект nanomsg в Windows 7:

cmake ..
-- Building for: NMake Makefiles
-- The C compiler identification is GNU 4.7.1
-- Check for working C compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe
CMake Error: Generator: execution of make failed. Make command was: "nmake" "/NOLOGO" "cmTC_5d837\fast"
-- Check for working C compiler: C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe -- broken
CMake Error at C:/Program Files (x86)/cmake-3.9.4-win64-x64/share/cmake-3.9/Modules/CMakeTestCCompiler.cmake:51 (message):
The C compiler "C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe" is not
able to compile a simple test program.

It fails with the following output:

Change Dir: C:/Users/User/Documents/Internal/nanomsg-master/build/CMakeFiles/CMakeTmp



Run Build Command:"nmake" "/NOLOGO" "cmTC_5d837\fast"



Generator: execution of make failed.  Make command was: "nmake" "/NOLOGO"
"cmTC_5d837\fast"





CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:29 (project)


-- Configuring incomplete, errors occurred!
See also "C:/Users/User/Documents/Internal/nanomsg-master/build/CMakeFiles/CMakeOutput.log".
See also "C:/Users/User/Documents/Internal/nanomsg-master/build/CMakeFiles/CMakeError.log".

я использую gcc компилятор и make от Mingw Toolchain и я могу успешно работать gcc.exe а также mingw32-make.exe на простом примере.

В файле CMakeCache.txt переменные кэша устанавливаются следующим образом:

//C compiler
CMAKE_C_COMPILER:FILEPATH=C:/Program Files (x86)/CodeBlocks/MinGW/bin/gcc.exe

//Program used to build from makefiles.
CMAKE_MAKE_PROGRAM:STRING=nmake

Я думаю, что проблема исходит от CMAKE_MAKE_PROGRAM переменная должна принимать C:/Program Files (x86)/CodeBlocks/MinGW/bin/mingw32-make.exeОднако я не понимаю, откуда он получает значение nmake,

Даже я заменил его вручную, я получаю ту же проблему.

Мои вопросы:

  • Как CMake заполняет переменные Cache?
  • Зачем CMAKE_MAKE_PROGRAM принимает значение nmake?
  • Почему изменение этой переменной вручную не решило проблему?

1 ответ

CMake заполняет файл кеша значениями, которые он определяет на основе того, что находится в CMakeLists.txt и любые файлы, которые он включает в сочетании с любыми -D параметры, поставляемые в.

В Windows CMake по умолчанию будет использовать Microsoft nmakeинструмент. Способ изменить это - передать параметр -G"MinGW Makefiles" в или в случае использования оболочки MSYS -G"MSYS Makefiles".

Но есть инструмент сборки быстрее, чем make´ called Ninja (get it from https://ninja-build.org/) which you can use by passing -GNinja tocmake`.

Примечание: я вижу, вы используете старую MinGW, которая поставляется с Code::Blocks. Существует более современный преемник MinGW под названием MinGW-w64, который поддерживает как 32-разрядную, так и 64-разрядную версию Windows. Последнюю автономную сборку можно загрузить с https://winlibs.com/, и она также включает ninja.exe.

PS: Если вы столкнетесь с дополнительными проблемами при создании источников nanomsg после выполнения этих советов, cosnsider передает -DNN_TESTS:BOOL=OFF к cmake

Другие вопросы по тегам