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
to
cmake`.
Примечание: я вижу, вы используете старую MinGW, которая поставляется с Code::Blocks. Существует более современный преемник MinGW под названием MinGW-w64, который поддерживает как 32-разрядную, так и 64-разрядную версию Windows. Последнюю автономную сборку можно загрузить с https://winlibs.com/, и она также включает
ninja.exe
.
PS: Если вы столкнетесь с дополнительными проблемами при создании источников nanomsg после выполнения этих советов, cosnsider передает
-DNN_TESTS:BOOL=OFF
к
cmake