文章中汉字部分皆被代码所代替,宝宝们在复制粘贴的时候要选好对应的开源镜像站链接,详情请见评论区,我已放好相应代码!!!!!
一、虚拟机的安装:
安装所必须用到的软件如下:
1.vmware station 破解版(版本至少14以上)
2.Xshell7破解版(最新版本即可)
3.Git-bash(官方版即可)
4.vscode(官方版即可)
5.ubuntu系统(本人使用22.04版本)
二、虚拟机的配置:
1.vmware station的设置:
全部软件安装完毕之后在vm中点击创建虚拟机,然后点击浏览,在光盘映像文件处点击“浏览”,选中下载好的ubuntu系统(文件格式为.ios),”系统别名“可随意填写,“全名“随机命名,”用户名“要用全英(除root外),”密码“不少于八位,安装地址看个人喜好,作者c盘空间足够,索性就全部安装到了c盘,以后重装系统时也不会被误删,下一步设置磁盘容量时不少于40个G,然后一路继续,安装时会弹出缺少工具包的信息,这个并不影响总体操作,顺着系统给出的提示安装工具包就可以了,虚拟机安装完毕之后,进入虚拟机,若出现错误提示,直接关闭选择continue即可,一路continue来到选择时区,直接选择上海即可,接下来来到”Who are you?“,前两项可随便填写,”用户名“和”密码“要填写与之前设置的一样的,然后就可以继续了,接下来会出下一个”Connect Your Online Accounts“的窗口,先skip跳过即可,打开左下角九个白色小点的菜单,找到名为“terminal”的应用,进入到一个类似于dos命令窗口的终端,然后需要设置root用户的密码,因为最开始登录,Ubuntu不允许root超级用户直接登录。具体操作:在光标处输入sudo passwd,点击回车,首次是设置密码,可以与之前设置的密码相同,值得一提的是,在输入密码的时候系统不会显示输入字符,所以不必认为是自己的键盘出了问题(doge),当密码设置成功的以后,输入sudo su,点击回车就可以切换到root超级用户了。当切换到root超级用户以后,命令行前缀会变成root@,接着输入cat /etc/apt/sources.list,点击回车以后,如果不是在校学生用校园网的宝宝们输入
echo "deb ubuntu安装包下载_开源镜像站-阿里云 jammy main restricted universe multiverse
deb-src ubuntu安装包下载_开源镜像站-阿里云 jammy main restricted universe multiverse
deb ubuntu安装包下载_开源镜像站-阿里云 jammy-security main restricted universe multiverse
deb-src ubuntu安装包下载_开源镜像站-阿里云 jammy-security main restricted universe multiverse
deb ubuntu安装包下载_开源镜像站-阿里云 jammy-updates main restricted universe multiverse
deb-src ubuntu安装包下载_开源镜像站-阿里云 jammy-updates main restricted universe multiverse
deb ubuntu安装包下载_开源镜像站-阿里云 jammy-proposed main restricted universe multiverse
deb-src ubuntu安装包下载_开源镜像站-阿里云 jammy-proposed main restricted universe multiverse
deb ubuntu安装包下载_开源镜像站-阿里云 jammy-backports main restricted universe multiverse
deb-src ubuntu安装包下载_开源镜像站-阿里云 jammy-backports main restricted universe multiverse
" > /etc/apt/sources.list
这一大段代码,然后再来一句apt update,
如果是在校大学生用校园网敲代码的宝宝们,则需要输入
第一句“echo "deb Index of /ubuntu/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror jammy main restricted universe multiverse" > /etc/apt/sources.list”,
第二句“echo "deb Index of /ubuntu/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list”,
第三句“echo "deb Index of /ubuntu/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror jammy-backports main restricted universe multiverse" >> /etc/apt/sources.list”,
第四句“echo "deb Index of /ubuntu/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror jammy-security main restricted universe multiverse" >> /etc/apt/sources.list”,
然后输入cat /etc/apt/sources.list
这一段来自清华的源,然后老样子来一句apt update。
只要能显示从网址里读取,就表示正常,正常后通过ctrl+c来取消网址读取。(如果第一段代码输入后不成功的小伙伴可以输入第二段代码试试哦!)
2.vim的设置:
接下来需要安装一个名为vim的编辑器,需要用vim修改ssh的配置。具体操作为在ubuntu中的终端输入apt install vim,然后回车进行对vim编辑器的安装。完成之后来设置ssh,为了能在虚拟机外面访问,所以需要配置ssh。首先需要先安装ssh,输入命令apt install openssh-server,点击回车对ssh进行安装。安装完成以后,使用vim打开/etc/ssh/sshd_config文件,按i进入编辑模式,找到#PermitRootLogin prohibit-password这一句代码(黄色字体),将其改为PermitRootLogin yes,然后esc退出编辑模式,:q!保存退出。重启ssh,输入/etc/init.d/ssh restart,这段命令是安装openssh服务后,在系统配置区留下的一个控制ssh服务的脚本。接下来要用到我们的xshell,打开之后,新建会话,会话名称随意,主机填写虚拟机的IP(Ubuntu中打开设置,点击网络,1000MB/S旁的小齿轮打开设置IPv4地址即IP),点击确定,然后左边一栏会出现新建会话的名称,点击新建的会话,填写用户姓名,初学者建议用户名设为root,要不然很多权限都不够,以后对权限熟练了,再自己设置用户名,接着设置密码,可以与之前的密码相同,设置完毕,这样以后我们可以在xshall的编辑框内使用vim创建文件,并进入编辑模式,可以在编辑模式中编写C++的代码,特别注意,新建的文件后缀只能是“.cpp”或“.cc”,这样系统才能正常识别C++代码。然后使用G++编译运行新建的“.cpp”或“.cc”文件。
3.VScode的设置:
首先打开VScode,选到插件,搜索下载remote development,然后下载Remote Development,Remote – SSH和Remote - SSH: Editing Configuration Files。 选择左边栏像电脑一样的图标,叫做远程资源管理器,点击后会在中间栏上面显示“远程资源管理器”,旁边有个下拉菜单,点击选择“remotes(tunnels/ssh)”,然后点击SSH,有个齿轮会出现,点击齿轮后在中间搜索栏会出现多个选项,选择第一个config文件进行配置的修改。首先第一个host是对远程系统的昵称,随意写,hostname是ubuntu的IP(上文有所提及),然后user后面写root就可以,特别注意,追加内容要和刚才提到过的标签名之间加一个空格。接着打开提前下载好的gitbash,运行ssh-keygen -t rsa,然后在Ubuntu中运行ssh-keygen,两次操作中最重要的,就是看两次结果中的加密算法是否相同。ssh-keygen这个命令是直接产生用于访问当前系统的ssh密钥公钥。加密算法有很多,如果两种默认算法不同,那就需要专门去指定成一样的,才能连通两个机器。因为需要用这个东西让VScode能一直免密登陆到Ubuntu,否则每隔一分钟半分钟就要在VScode上输入一次密码。然后我们在C盘/用户/.ssh文件夹中用记事本打开.pub后缀的文件,将里面内容复制,然后在Ubuntu中用vim打开~/.ssh/authorized_keys,进入编辑模式,追加到最后。然后回到Vscode,在config文件中追加一行IdentityFile +文件路径(C盘/用户/.ssh文件夹,打开后直接复制即可)+id_rsa文件。保存后点击“远程资源管理器”下面的“remote”键右边的刷新按钮。然后系统可能会先访问github,关掉该网页,然后跳过访问github,就会更新ssh了。然后在Ubuntu中输入server sshd 、/etc/init.d/ssh restart,接着SSH的下拉菜单里会显示出自己的远程系统昵称,点击昵称,右边会出现箭头,点击箭头,会出现三个操作系统的名称,选择linux进行连接,如果没有成功,可能是因为没有写入端口号,打开cinfig文件,末尾追加一句Port 22,再次进行连接,若这里又是连接失败,可能是config文件中多了点东西,打开config文件删掉IdentityFile这一行配置,再次进行连接,如果还是失败,在浏览器中输入地址https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stableble,将${commit_id}替换成VScode的提交编号,具体位置在上方工具栏中点击帮助,再点击关于,可以查找到这一串数字。在这个网页中会自动下载一个压缩包,然后在Ubuntu中上传这个压缩包。可能再连接linux的时候,Vscode没有办法顺利下载这个包。需要用到xshell,点击最上面的”文件“,点击”传输“,选择”XMODEM发送“,选择下载好的那个tar.gz文件,连接上Linux以后,我们需要下载两个插件,分别是C/C++和code runner,接着选择新建文件夹,这里选择新建文件夹完全是个人习惯,这个文件夹之后会存放所有的编码文件和二进制文件。然后在这个文件夹里创建一个文本文件,后缀为.cpp。然后写入简单的C++代码,比如“Hello World”,接着点击F5,出现了三个选项,选择g++生成活动文件,然后系统会提示警告,这时要打开launch.json文件,替换成以下内容:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: Debugging in Visual Studio Code
"version": "0.2.0",
"configurations":
[
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: g++ 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
接着打开命令面板,找到任务:配置任务,打开tasks.json文件,输入以下内容:
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
然后打开命令面板,打开setting.json文件,输入以下内容:
{
"editor.fontSize": 22,
"workbench.colorTheme": "Default Dark Modern",
"version": "0.2.0",
"configurations": [
{
"name": "C/C++",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"preLaunchTask": "compile",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
],
"code-runner.runInTerminal": true,
"debug.onTaskErrors": "showErrors",
"C_Cpp.default.includePath": [
],
"code-runner.executorMap": {
"javascript": "node",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
"c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -std=c++11 && $dir$fileNameWithoutExt",
"objective-c": "cd $dir && gcc -framework Cocoa $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"php": "php",
"python": "python -u",
"perl": "perl",
"perl6": "perl6",
"ruby": "ruby",
"go": "go run",
"lua": "lua",
"groovy": "groovy",
"powershell": "powershell -ExecutionPolicy ByPass -File",
"bat": "cmd /c",
"shellscript": "bash",
"fsharp": "fsi","csharp": "scriptcs",
"vbscript": "cscript //Nologo",
"typescript": "ts-node",
"coffeescript": "coffee",
"scala": "scala",
"swift": "swift",
"julia": "julia",
"crystal": "crystal",
"ocaml": "ocaml",
"r": "Rscript",
"applescript": "osascript",
"clojure": "lein exec",
"haxe": "haxe --cwd $dirWithoutTrailingSlash --run $fileNameWithoutExt",
"rust": "cd $dir && rustc $fileName && $dir$fileNameWithoutExt",
"racket": "racket",
"scheme": "csi -script",
"ahk": "autohotkey",
"autoit": "autoit3",
"dart": "dart",
"pascal": "cd $dir && fpc $fileName && $dir$fileNameWithoutExt",
"d": "cd $dir && dmd $fileName && $dir$fileNameWithoutExt",
"haskell": "runhaskell",
"nim": "nim compile --verbosity:0 --hints:off --run",
"lisp": "sbcl --script",
"kit": "kitc --run",
"v": "v run",
"sass": "sass --style expanded",
"scss": "scss --style expanded",
"less": "cd $dir && lessc $fileName $fileNameWithoutExt.css",
"FortranFreeForm": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran-modern": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran_fixed-form": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt",
"fortran": "cd $dir && gfortran $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
},
"terminal.integrated.tabs.enabled": true,
"C_Cpp.default.cppStandard": "c++20",
"C_Cpp.default.cStandard": "c17",
"workbench.editorAssociations": {
"*.ipynb": "jupyter-notebook"
},
"notebook.cellToolbarLocation": {
"default": "right",
"jupyter-notebook": "left"
},
"diffEditor.ignoreTrimWhitespace": false,
"explorer.confirmDragAndDrop": false,
"explorer.confirmDelete": false,
"files.associations": {
"iostream": "cpp",
"ostream": "cpp"
},
}
打开命令面板,搜索C/C++,选择C/C++编辑配置(UI),然后打开c_cpp_properties.json文件,输入以下内容:{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**", // 将本地工作目录添加到include路径中,
// 这样本地的所有头文件都可以被VSCode索引,这样编辑就不会触发红色的波浪线;
"/usr/include/**" // 将Linux下的引用路径添加到include路径中,
// 对于一些第三方依赖库,如Boost的头文件,就能被VSCode索引
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
再次回到自己的.cpp文件中点击F5,若运行成功就代表着你已经学会了配置vscode连接Linux的操作。以上的配置代码,只支持单个文件的C++代码编写,不支持多文件的代码编写。