我想将MinGW作为C编译器运行。 MinGW已从Chocolatey安装。调用是从gitlab-runner到CMake。失败
$ cmake -G "MinGW Makefiles" -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DLIB_MAN=OFF -DCMAKE_INSTALL_PREFIX=C:\opt\x64 -B. ..
-- The C compiler identification is unknown
-- Check for working C compiler: C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe
-- Check for working C compiler: C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe -- broken
CMake Error at C:/Program Files/CMake/share/cmake-3.16/Modules/CMakeTestCCompiler.cmake:60 (message):
The C compiler
"C:/ProgramData/chocolatey/bin/x86_64-w64-mingw32-gcc.exe"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp
Run Build Command(s):C:/ProgramData/chocolatey/bin/mingw32-make.exe cmTC_ffa53/fast && C:/ProgramData/chocolatey/lib/mingw/tools/install/mingw64/bin/mingw32-make -f CMakeFiles\cmTC_ffa53.dir\build.make CMakeFiles/cmTC_ffa53.dir/build
mingw32-make[1]: Entering directory 'C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_ffa53.dir/testCCompiler.c.obj
C:\ProgramData\chocolatey\bin\x86_64-w64-mingw32-gcc.exe -o CMakeFiles\cmTC_ffa53.dir\testCCompiler.c.obj -c C:\gitlab-runner\builds\zjE1Mkfg\0\mlz\kww\build\CMakeFiles\CMakeTmp\testCCompiler.c
mingw32-make[1]: *** [CMakeFiles\cmTC_ffa53.dir\build.make:65: CMakeFiles/cmTC_ffa53.dir/testCCompiler.c.obj] Error 1
mingw32-make[1]: Leaving directory 'C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeTmp'
mingw32-make: *** [Makefile:120: cmTC_ffa53/fast] Error 2
CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:6 (project)
-- Configuring incomplete, errors occurred!
See also "C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeOutput.log".
See also "C:/gitlab-runner/builds/zjE1Mkfg/0/mlz/kww/build/CMakeFiles/CMakeError.log".
ERROR: Job failed: exit status 1
从各种Web来源了解到,如果系统[1]上存在sh.exe
,则MinGW必然会失败。但是,sh.exe
附带了几个应用程序,其中包括我无法删除的Git和Visual Studio。建议在某处添加-DCMAKE_SH="CMAKE_SH-NOTFOUND"
,但这无效。
我从2015年[2]看过一个相关问题,但是涉及CLion
。唯一建议的答案包含几个断开的链接-完全来说,该线程没有帮助。
如何进行?有机会解决sh.exe
问题吗?
网络上的其他建议建议使用-G "MSYS Makefiles"
。但是,CMake文档[3]似乎排除了这一点:“与Windows命令提示符不兼容。要在Windows命令提示符下进行构建,请使用MinGW Makefiles生成器。”
[1] https://stackoverflow.com/a/7411982/1017348
[2] CLion: Error:The C compiler "C:/MinGW/bin/gcc.exe" is not able to compile a simple test program
[3] https://cmake.org/cmake/help/latest/generator/MSYS%20Makefiles.html#generator:MSYS%20Makefiles(每CMake 3.16.1
答案 0 :(得分:1)
经过长时间的试验,我得出结论,问题出在Chocolatey的MinGW包装上。我解决问题
C:\MinGW\bin
顶部插入了PATH
。$ cmake -G "Ninja" -DLIB_MAN=OFF -DCMAKE_INSTALL_PREFIX=C:\opt\x64 -B. ..
-- The C compiler identification is GNU 8.2.0
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
还请注意:
-DCMAKE_C_COMPILER=...
-G "MinGW Makefile"
工作; -G Ninja
可以正常工作。答案 1 :(得分:1)
sh.exe
仅是在尝试生成项目时第一次运行CMake时出现的问题。您可以再次重新运行CMake,CMake将继续进行正常处理以生成项目(在3.16
版中进行了测试)。我看到一个补丁删除了该检查,应该是CMake未来版本的一部分。
已经提到gcc
的安装错误。当有人提到gcc
失败并显示一条Error 1
消息时,情况似乎总是如此。应当注意,Error 1
不是来自CMake
。 CMake
只是从运行mingw32-make
时开始收集输出以构建示例项目。
输出-- The C compiler identification is unknown
中的第一条消息很清楚,表明您的编译器无法正常工作。此步骤的所有输出都在CMake在build文件夹中生成的日志和错误文件中。您将能够看到它如何调用编译器,以及带有哪些选项和编译器的输出。