[Devcpp]为Devc自定义编译器及Devcpp路径读取的Bug

0. 前言

  Devcpp自带的GCC虽说是14年发布的4.9.2版的,但怎么说也还是太旧了,C++17完全不能支持。
  所以还是打算自行下载新版本的GCC,配置到Devcpp里来编译。

1. 环境

  我下载的GCC放在C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64里。
  Devcpp自带的GCC放在Devcpp安装目录下的MinGW64里。
  在Devcpp里配置一个编译器需要下面这些信息(x64):

1.1 程序

  • bin
  • x86_64-w64-mingw32\bin

1.2 C头文件

  • include
  • x86_64-w64-mingw32\include
  • lib\gcc\x86_64-w64-mingw32\4.9.2\include

1.3 C++头文件

  • include
  • x86_64-w64-mingw32\include
  • lib\gcc\x86_64-w64-mingw32\4.9.2\include
  • lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++

1.4 链接库

  • lib
  • x86_64-w64-mingw32\lib

2. 配置

  在Devcpp添加编译器还是很方便的(flag):

  1. Alt T C打开编译器选项
  2. 添加编译器选项
  3. 在程序选项页设置编译套件的程序名
  4. 在目录里设置编译套件的路径和环境

  然后就搞定了!(flag

3. 问题

  再次启动Devcpp时,会提示找不到库,编译套件的各程序。
  虽然选否的话,可以继续没问题地使用,但是每次都要点的话就很难受。

4. 侦查

  Devcpp的编译器的各种设置保存在%APPDATA%\Dev-Cpp\devcpp.ini里,明显[CompilerSets]保存的就是各个编译器设置的名称,[CompilerSets_%d]里保存的就是各个编译器的具体设置。
  预设的编译器选项的Libs

%path%\MinGW64\bin;%path%\MinGW64\x86_64-w64-mingw32\bin

 &esmp;这个路径肯定肯定是没有问题的,那我新设置的编译器的Libs呢?可以发现被加上了引号。

"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin";"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\x86_64-w64-mingw32\bin"

  启动Devcpp,可以发现提示错误

下面路径 二进制 不存在:
C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin"
"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\x86_64-w64-mingw32\bin

下面的二进制目录已被搜索:
C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin";"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\x86_64-w64-mingw32\bin

  按Alt T C查看路径设置,可以发现所有路径都混合成一条

C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin";"C:\Program Files\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\x86_64-w64-mingw32\bin

  明显是引号读取错误了。(拔flag)需要用其他路径,使得此处不会出现引号,以防引号读取错误。

5. 解决

  手动在ini中将双引号删除掉后再次启动Devcpp,可以发现错误提示消失了!(再插flag)
  再次启动Devcpp可以发现错误提示又回来了。
  经测试发现,Devcpp在启动和退出时都会读取这个文件,并自动格式化后重新保存这个配置文件。在这之后,原本手动删掉的双引号又回来了。(神tm)
  尝试用%ProgramFiles%代替"C:\Program Files",然而无效。不过注意到其他编译选项里用的是%Path%的“环境变量”,所以这里的%var%应该是内部变量,而非系统环境变量。
  最后用短目录名完美解决该问题。
  即用"PROGRA~1"代替"Program Files"。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值