改错半月志:CMake报错(gcc —broken)

项目场景:

Windows+Vscode+Cmake下

上次误打误撞的报错没了之后后,由于过于高兴,我并没有接着去实现CMakeLists.txt的接下来的操作{我记录一下(在终端输入的)mkdir build(新建build文件夹)———cd build(进入build目录)——cmake -G "MinGW Makefiles" ..(生成Makefiles文件-和configure步骤等效)——make(成了之后直接make就成了)----运行程序cd bin----.\<可执行文件名字>.exe


问题描述

[variant] Loaded new set of variants
[kit] Successfully loaded 1 kits from C:\Users\x\AppData\Local\CMakeTools\cmake-tools-kits.json
[proc] Executing command: "C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\gcc.exe" -v
[main] Configuring folder: xue 
[proc] Executing command: D:/下载软件/bin/cmake --no-warn-unused-cli -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug "-DCMAKE_C_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\gcc.exe" "-DCMAKE_CXX_COMPILER:FILEPATH=C:\Program Files\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin\g++.exe" -Se:e -Be:eild -G "MinGW Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The C compiler identification is GNU 8.1.0
[cmake] -- The CXX compiler identification is GNU 8.1.0
[cmake] -- Detecting C compiler ABI info
[cmake] -- Detecting C compiler ABI info - failed
[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe
[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken
[cmake] CMake Error at D:/下载软件/cmake-3.23/Modules/CMakeTestCCompiler.cmake:69 (message):
[cmake]   The C compiler
[cmake] 
[cmake]     "C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe"
[cmake] 
[cmake]   is not able to compile a simple test program.
[cmake] 
[cmake]   It fails with the following output:
[cmake] 
[cmake]     Change Dir: E:eild/CMakeFiles/CMakeTmp
[cmake]     
[cmake]     Run Build Command(s):C:/PROGRA~1/MINGW-~1/X86_64~1.0-W/mingw64/bin/mingw32-make.exe -f Makefile cmTC_777d1/fast && C:/PROGRA~1/MINGW-~1/X86_64~1.0-W/mingw64/bin/mingw32-make.exe  -f CMakeFiles\cmTC_777d1.dir\build.make CMakeFiles/cmTC_777d1.dirild
[cmake]     mingw32-make.exe[1]: Entering directory 'E:eild/CMakeFiles/CMakeTmp'
[cmake]     process_begin: CreateProcess(NULL, D:\涓嬭浇杞欢\bin\cmake.exe -E cmake_echo_color --switch= --progress-dir=E:\xue\build\CMakeFiles\CMakeTmp\CMakeFiles --progress-num=1 "Building C object CMakeFiles/cmTC_777d1.dir/testCCompiler.c.obj", ...) failed.
[cmake]     make (e=2): 系统找不到指定的文件。
[cmake]     mingw32-make.exe[1]: *** [CMakeFiles\cmTC_777d1.dir\build.make:76: CMakeFiles/cmTC_777d1.dir/testCCompiler.c.obj] Error 2
[cmake]     mingw32-make.exe[1]: Leaving directory 'E:eild/CMakeFiles/CMakeTmp'
[cmake]     mingw32-make.exe: *** [Makefile:126: cmTC_777d1/fast] Error 2
[cmake]     
[cmake]     
[cmake] 
[cmake]   
[cmake] 
[cmake]   CMake will not be able to correctly generate this project.
[cmake] Call Stack (most recent call first):
[cmake]   CMakeLists.txt:2 (project)
[cmake] 
[cmake] 
[cmake] -- Configuring incomplete, errors occurred!
[cmake] See also "E:eild/CMakeFiles/CMakeOutput.log".
[cmake] See also "E:eild/CMakeFiles/CMakeError.log".

注意:我是在windows下用的小白(网上都是大佬的Ubuntu报错比较多)

大家不要光看[cmake]   It fails with the following oautput:后面的,大家先从前面开始看一看(虽然行很多)需要耐心,可以看懂得(虽然我前前后后搞了半个月,,)报错很多很可怕。

在这里大家先对比一下大家自己的报错和上面的报错:

最主要的问题报错是:

[cmake] The C compiler:

[cmake]        "(你自己的编译器文件路径)"

[cmake]   is not able to compile a simple test program.

上述报错意思:即编译器无法正确的编译简单的测试程序

[cmake] CMake will not be able to correctly generate this project./不能正确生成项目

这也是我最开始注意的点(在网上搜来搜去

我要告诉你的是应该先看报错最开头是否出现fail,和broken的提示行:

[cmake] -- Detecting C compiler ABI info - failed

[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken

(xdm,一样的话再接着看)

改错历程(大家最好看看,如果你也被困扰了很久的话,希望给你些坚持的信心):大概是改了十天左右才决定一行一行的去看的,网上我只要是能搜到的办法都去试了,但是都不成,所以没办法了才注意到前面)大家如果是一出现就看到了我的文章,请大家一定要一行行的看一下(有时候看似最长的路也是最直接的。


原因分析:

[cmake] -- Detecting C compiler ABI info - failed

[cmake] -- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/gcc.exe - broken

上一句我并没有太大的收获,然后就一直在和gcc死磕——{大家都开始用cmake了,Mingw-64肯定都安了也会配置vscode了(没有的话后面也不会讲(●ˇ∀ˇ●))

问题排查:我先在vscode里编译了(g++ -g hello.ccp -o hello)一下简单的程序来检查是否是编译器坏了,发现可以生成hello.exe文件,是没有问题的,2,然后我在学长的帮助下了解到了一个网站:stack overflow(它是英文的,,而且有的图片上的英文是不可以用浏览器翻译的),所以看到的时候很崩,但是想想之前做了那些鬼事,我又接着看下去了,这个网站是用来解决报错的,推荐给大家。

我的问题是在看了这篇解决的:

CMake reports GCC is broken. Where do I start? - Stack Overflowhttps://stackoverflow.com/questions/16594053/cmake-reports-gcc-is-broken-where-do-i-start下面这篇是和Ubuntu有关的:(大家感兴趣 的可以看看)

wgcc - "CMAKE_CXX_COMPILER broken" while compiling with CMake - Stack Overflowhttps://stackoverflow.com/questions/31421327/cmake-cxx-compiler-broken-while-compiling-with-cmake


解决方案:

如果你和我的报错一样,解决方法真的离谱。

上面那篇里

INCLUDE(CMakeForceCompiler)
CMAKE_FORCE_C_COMPILER(gcc GNU)
CMAKE_FORCE_CXX_COMPILER(g++ GNU)

这给在很多文章里都看到过,但在我那不管用,,,(作用好像是对编译器的强制声明,,还不大懂,还在学)

我看到最离谱的是这哥的回答:

Same happened with me, in CLion.

Check if your compilers and other things are properly installed and/or configured.

I Re-installed the GCC Compiler and the CMake, then reconfigured my IDE.

and it worked for me since then!

看完我根本没信,,,,,但是但是但是,(15天了,整整半个月了)当所有的方法都不成时,我 的脑海里突然响起:最后的那个最不可能的也是对的。

所以我果断重装了mingw-64。(重装mingw-64时我又遇到了The file has been downloaded incorrectly!,简直痛苦,然后解决了)

然后重新配置了vscode,我一直测试到了底生成了hello.exe,这回是真的成功了。

总结一下:重装MinGw-w64即解决了问题,我花了半个月到最后解决方法却是这么简单,成功的时候我像是范进中举般狂喜,细想下来我真的感慨良多,(为了最后这一步)我东查西找的也学会了很多,但远水解不了近渴,解决不了就会很难受,有时候报错多并不可怕,可怕的是找不到问题的本源,这是我的一些感悟,也纪念下一个报错改15天的坚持吧。如果以后都可以先从最简单的问题开始排除可能就不需要这么久了,大家在看这篇文章不知道会不会用太久,还是谢谢大家看到这里(太不容易了,希望大家都能保持这份恒心)。

---------------------------

时隔一年我又回来了,当时只为做课设学习cmake只是浅尝罢了,现在看之前的博客写的也真的是抽象:今年的计划:会重拾cmake的使用:

1、用于实现机组实验

2、用于树莓派pico开发的学习

3、重新学习c++不止停留在编程语言层面

4、学会并熟练进行VScode等开发环境的配置

后面有时间会持续更新cmake,树莓派,wsl,虚拟机,nfv平台,和机组等相关内容算法和数论看具体情况。CSDN,再冲一波。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值