Sublime配置C/C++编译环境与中文乱码的解决
2021/6/13 20:51:06
本文主要是介绍Sublime配置C/C++编译环境与中文乱码的解决,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Sublime Text提供了构建系统,允许用户运行外部程序,这使得我们可以在Sublime Text中对源代码进行编译和运行。本文对个人配置C/C++的过程加以记录整理。
特别地,我查阅了很多资料,并没有发现一个令我满意的中文乱码解决方案。乱码问题主要是由于Sublime Text默认的utf-8编码和Windows控制台默认的gbk(cp936)编码产生冲突,使用-fexec-charset与-finput-charset又会产生很多局限性。在此,我采取的办法是将Windows控制台的编码临时改为utf-8(cp65001)(详情见后文)。
注:本文只适用于Windows系统。
MinGW
首先要确保计算机中已经安装好MinGW,并且环境变量中存在以下几项:
变量 | 值 |
---|---|
C_INCLUDEDE_PATH | your\path\to\MinGW\include(MinGW\include的路径) |
LIBRARY_PATH | your\path\to\MinGW\lib(MinGW\lib的路径) |
Path | your\path\to\MinGW\bin(MinGW\bin的路径) |
若不存在这几项,则手动更改添加这几项到环境变量,然后重启。
可以通过命令行来简单判断是否设置成功:Win+R
打开cmd
,分别输入gcc
和g++
,若都有提示而不是找不到相关命令则是设置成功。
Sublime
打开Sublime Text,若是英文,则寻找“Tools->Build System->New Build System…”;若是中文,则寻找“工具(T)->编译系统(U)->新建编译系统…”。
新建的这个文件可以任意起一个名字,如cpp.sublime-build或者c++.sublime-build。我们将使用这个文件来定制构建系统。
在此之前,我们可以参考一下Sublime Text自带的C/C++构建系统文件,该文件存在于Sublime Text的安装路径下的Packages子目录中,在该子目录中,我们找到C++.sublime-package,这可以当成是一个zip压缩包,将其复制到其他位置并重命名为c++.zip,解压该文件,我们将会看到其中有两个文件C Single File.sublime-build和C++ Single File.sublime-build。这两个文件分别是C和C++的构建系统文件。
C Single File.sublime-build:
{ "shell_cmd": "gcc \"${file}\" -o \"${file_path}/${file_base_name}\"", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c", "variants": [ { "name": "Run", "shell_cmd": "gcc \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"" } ] }
C++ Single File.sublime-build:
{ "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\"", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c++", "variants": [ { "name": "Run", "shell_cmd": "g++ \"${file}\" -o \"${file_path}/${file_base_name}\" && \"${file_path}/${file_base_name}\"" } ] }
这两个文件采用JSON格式,最外层花括号里是一个个键值对。部分键的描述如下:
键 | 描述 |
---|---|
shell_cmd | 一个字符串,指定要执行的shell命令。 |
file_regex | 包含要在构建输出上运行以匹配文件信息的正则表达式的字符串。匹配的文件信息用于启用结果导航。 |
working_dir | 一个字符串,指定要在其中执行cmd或shell_cmd的目录 。 |
selector | 当Tools->Build System->Automatic设置为true时使用。Sublime Text使用这个范围选择器来为活动视图找到合适的构建系统。 |
encoding | 构建系统输出的编码,使用Python编解码器名称。默认为“utf-8”。 |
variants | 变体字典的列表。如果构建系统的选择器与活动文件匹配,变体名称将出现在命令面板中,以便于访问。使用变体,可以在同一个.sublime-build文件中指定多个构建系统任务。 |
配置文件中还出现了形如${}
的部分,这个部分被称为变量,变量也可以省去{}
。
变量将在"shell_cmd"或"working_dir"选项中指定的任何字符串中展开。如果需要在这些选项中指定一个字面值$
,则必须用\
转义。因为JSON也使用反斜杠来转义,所以$
需要被写成\\$
。部分变量的描述如下:
变量 | 描述 |
---|---|
$file | 活动视图中文件的完整路径(包括文件夹)。 |
$file_path | 活动视图中包含该文件的文件夹的路径。 |
$file_name | 活动视图中文件的文件名(无文件夹路径)。 |
$file_base_name | 活动视图中文件的文件名(不包括扩展名)。 |
$file_extension | 活动视图中文件的文件名的扩展名。 |
更多内容可参考:http://www.sublimetext.com/docs/build_systems.html,https://sublime-text-unofficial-documentation.readthedocs.io/en/latest/reference/build_systems/configuration.html。
默认的C Single File.sublime-build和C++ Single File.sublime-build提供的shell_cmd命令是编译当前文件,变体Run中提供的shell_cmd命令是执行编译好的文件。若执行的文件有输出,则它将输出在Sublime Text内建的窗口中。然而,这种方法会导致程序无法进行输入,为此,我们往往是创建一个cmd窗口在那里执行程序。
按照C Single File.sublime-build和C++ Single File.sublime-build的框架我们在新建的构建系统文件中稍作修改,即可实现在cmd窗口运行程序,完整内容如下:
C:
{ "shell_cmd": "gcc \"${file}\" -o \"${file_base_name}\" && start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c", "variants": [ { "name": "Build", "shell_cmd": "gcc \"${file}\" -o \"${file_base_name}\"" }, { "name": "Run", "shell_cmd": "start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"" }, { "name": "Multiple files Build & Run", "shell_cmd": "gcc *.c -o \"${file_base_name}\" && start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"" } ] }
C++:
{ "shell_cmd": "g++ \"${file}\" -o \"${file_base_name}\" && start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"", "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$", "working_dir": "${file_path}", "selector": "source.c++", "variants": [ { "name": "Build", "shell_cmd": "g++ \"${file}\" -o \"${file_base_name}\"" }, { "name": "Run", "shell_cmd": "start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"" }, { "name": "Multiple files Build & Run", "shell_cmd": "g++ *.cpp -o \"${file_base_name}\" && start cmd /c \"chcp 65001 & cls & \"${file_path}/${file_base_name}\" & pause\"" } ] }
shell_cmd中,start cmd
即为打开cmd;/c
表示一旦这个cmd被打开,程序不用等待cmd后面的内容执行完毕,就返回到调用start的环境里;chcp 65001
表示将当前打开的cmd窗口编码切换为utf-8(cp65001);cls
表示清屏;pause
表示暂停(即最后会显示按任意键继续);&
连接相邻的两个命令;另外,使用*
通配符可以匹配working_dir下所有C/C++文件,来实现一个简单的项目。
我们将写好的构建系统文件保存(一般来说保存在用户目录的AppData\Roaming\Sublime Text 3\Packages\User下,不建议直接修改C Single File.sublime-build与C++ Single File.sublime-build文件),编辑好C/C++即可按快捷键Ctrl+Shift+B
来选择构建系统(此时应该能看到自己的配置),以后只需按Ctrl+B
默认使用之前选择的配置。
这篇关于Sublime配置C/C++编译环境与中文乱码的解决的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26MATLAB 中 A(7)=[];什么意思?-icode9专业技术文章分享
- 2024-11-26UniApp 中如何实现使用输入法时保持页面列表不动的效果?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中怎么实现输入法弹出时禁止页面向上滚动?-icode9专业技术文章分享
- 2024-11-26WebSocket是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-26页面有多个ref 要动态传入怎么实现?-icode9专业技术文章分享
- 2024-11-26在 UniApp 中实现一个底部输入框的常见方法有哪些?-icode9专业技术文章分享
- 2024-11-26RocketMQ入门指南:搭建与使用全流程详解
- 2024-11-26RocketMQ入门教程:轻松搭建与使用指南
- 2024-11-26手写RocketMQ:从入门到实践的简单教程
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版