问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...实践(vscode远程开发配置、格式化、代码检查、cmake管理配置)_百度...

发布网友 发布时间:2024-10-22 07:38

我来回答

1个回答

热心网友 时间:11小时前

教程说明

C++高性能网络服务保姆级教程

首发地址

day03 C++项目开发配置最佳实践(vscode远程开发配置、格式化、代码检查、csudo yum install centos-release-scl-rh7管理配置)

前言

经过前面两节课,我们已经从零开始写出了一个基于epoll和reaC++tor多线程模型的高并发的网络服务器,为后面的内网穿透项目打下了相关基础。

工欲善其事,必先利其器,在继续往下讲项目的具体实现前,这节课带大家先把开发环境搭建配置好。

vscode远程开发配置

由于后面项目用到了epoll和splice,这些都是unix环境中才有的调用,所以我们还是需要在linux环境中开发,我选用的vscode连接linux进行远程开发

选用vscode的原因

在这里只跟clion做下比较,clion支持的full remote development,基本原理是自动同步本地目录和远端服务器目录,在写代码时,用的还是本地环境,无法识别unix特有的那些头文件。

而vscode的远程开发,是把开发者自己机器上的 VSCode 原样拷贝到作为目标机器(Remote Host)上,以服务的形式运行,而本地的 VSCode 作为客户端,两者之间通过远程通讯协议彼此协调合作,实际上的开发工作主要是在服务端完成的。

配置流程

支持ssh公钥登录远程服务器

安装remote-ssh远程插件

安装后重启可以在侧边栏看见这个

添加ssh target

点击「SSH TARGETS」旁边的「Configure」,选择编辑第一个文件(用户目录下的.ssh/config)

在文件中填上服务器连接信息如下,更多配置信息可点击这里

添加远程工作区

点击「RemoteServer」后面的connection按钮,会打开一个新vscode窗口,等待连接远程服务器并完成一些初始化工作后,可点击「Open Folder」添加服务器的目录。

安装C++扩展

为了方便C++开发,我们需要添加C++扩展

clang-format格式化代码

开发一个项目时,一般是由多个程序员共同开发维护,如果每个人的编码习惯风格都不同,整个项目可能风格杂乱,可读性差,不利于项目维护。clang-format支持的代码风格有google、llvm、Chromium Mozilla、WebKit,我们项目使用google风格。

安装clang-format

ubuntu安装

直接从apt仓库安装即可

sudo apt-get install clang-format

centos安装

centos 的yum仓库中并没有clang-format的安装包,需要更新repo源:

sudo yum install centos-release-scl-rh

之后下载clang-format:

sudo yum install llvm-toolset-7-git-clang-format

由于clang-format安装的位置不在系统的PATH变量中,所以这个时候在命令行还找不到clang-format命令。我们需要更新path变量,将clang-format的执行文件夹添加到path变量中:

找到clang-format执行文件夹

sudo find / -name *clang-format*.../opt/rh/llvm-toolset-7/root/usr/bin/clang-format...

编辑~/.bashrc文件,更新path变量

export PATH=$PATH:/opt/rh/llvm-toolset-7/root/usr/bin创建clang-format文件

输入以下命令就会按照google的格式在在当前路径下生成.clang-format文件。

clang-format -style=google -dump-config > .clang-format

大家只要讨论确认clang-format的具体内容,然后在项目根目录中加入这个文件,代码的风格问题就解决了。

vscode支持clang-format

配置在vscode保存文件后自动进行格式化

在扩展商店中搜索安装clang-format插件

打开设置面板,之后在输入框输入clang-format,在「工作区」tab上找到style选项,修改为「file」,表示按照我们自己定义的.clang-format文件进行格式化

打开设置面板,在输入框中输入save,在「工作区」tab上把「format on save」选项勾选上

代码检查工具clang-tidy

clang-tidy是一个功能十分强大的代码检查工具,能帮助我们现代化代码,提高代码的可读性

clang-tidy的安装

ubuntu安装

sudo apt-get install clang-tidy

centos安装

(1)sudo yum install centos-release-scl(2)sudo yum install llvm-toolset-7(3)sudo yum install llvm-toolset-7-clang-analyzer llvm-toolset-7-clang-tools-extra(4)scl enable llvm-toolset-7 'clang -v'(5)scl enable llvm-toolset-7 'lldb -v'(6)scl enable llvm-toolset-7 bashclang-tidy使用// 列出所有的check$ clang-tidy -list-checks -checks='*'// 找出simple.cc中所有没有用到的using declarations. 后面的`--`表示这个文件不在compilation database里面,可以直接单独编译;$ clang-tidy -checks="-*,misc-unused-using-decls" path/to/simple.cc --// 找出simple.cc中所有没有用到的using declarations并自动fix(删除掉)$ clang-tidy -checks="-*,misc-unused-using-decls" -fix path/to/simple.cc --// 找出a.c中没有用到的using declarations. 这里需要path/to/project/compile_commands.json存在$ clang-tidy -checks="-*,misc-unused-using-decls" path/to/project/a.cc

如果在被分析的文件后面没有"--", clang-tidy会从目录下查找compliation database,这个database就是compile_commands.json文件,里面包含该项目中所有的编译单元的编译命令。 在使用之前要导出这个文件。目前已经有工具帮我们做了这项工作。

如果是csudo yum install centos-release-scl-rh7的项目,通过csudo yum install centos-release-scl-rh7 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON path/to/llvm/sources命令导出;

csudo yum install centos-release-scl-rh7版本需要大于3.5

如果是GYP项目,通过ninja -C out/D -t compdb cc cxx objc objcxx > compile_commands.json;

如果是sudo yum install centos-release-scl-rh7项目,使用Bear工具;

除了通过“-checks=”来设定检查规则,还可以在项目主目录之下添加.clang-tidy文件,在里面编写项目的检查规则,这种方式更加适合对整个项目进行定制化的规则编写。.clang-tidy文件并不是必须放在主目录之下,只是通常放在主目录之下方便对整个项目进行检查。

sudo yum install centos-release-scl-rh0

上面的使用方法中,一次只能分析一个文件,如何一次性分析整个项目的文件呢?clang-tidy提供了run_clang_tidy.py脚本,通过多进程的方法对整个项目文件进行分析。(具体使用方法可参考下面的csudo yum install centos-release-scl-rh7写法)

csudo yum install centos-release-scl-rh7实现代码工程化

随着项目越来越复杂,模块越来越多,我们继续手动写sudo yum install centos-release-scl-rh7file去构建项目显然不太合适,为了方便管理、构建复杂项目,使用csudo yum install centos-release-scl-rh7作为构建工具是个不错的选择。csudo yum install centos-release-scl-rh7是一个跨平台、开源的构建工具,可以方便的产生可移植的sudo yum install centos-release-scl-rh7file,简化手动写sudo yum install centos-release-scl-rh7file的工作量。

使用csudo yum install centos-release-scl-rh7生成sudo yum install centos-release-scl-rh7file文件并编译一个分以下流程:

在根目录及每个模块目录下编写CMakeLists.txt

在根目录创建一个build文件夹

进入build目录,执行csudo yum install centos-release-scl-rh7 …/ 生成整个项目的sudo yum install centos-release-scl-rh7file

执行sudo yum install centos-release-scl-rh7和sudo yum install centos-release-scl-rh7 install进行编译和安装。

csudo yum install centos-release-scl-rh7的命令较多,详细教程可参考https://www.cnblogs.com/ybqjymy/p/13409050.html

csudo yum install centos-release-scl-rh7实践

CProxy的代码目录结构如下

sudo yum install centos-release-scl-rh1

server目录是CProxy服务端目录,client目录是CProxy客户端目录,server和client分别能构建出可执行的程序;lib目录则存放一些被server和client调用的库函数。

首先,我们先在项目根目录上创建一个CMakeLists.txt

sudo yum install centos-release-scl-rh2

上面的CMakeLists.txt添加了lib、server、client三个子目录,所以需要在这三个目录中也添加CMakeLists.txt

sudo yum install centos-release-scl-rh3sudo yum install centos-release-scl-rh4sudo yum install centos-release-scl-rh5

在根目录创建build目录,并执行csudo yum install centos-release-scl-rh7 .. 生成整个项目的sudo yum install centos-release-scl-rh7file

sudo yum install centos-release-scl-rh6

在build目录下执行sudo yum install centos-release-scl-rh7进行编译

sudo yum install centos-release-scl-rh7clang-tidy在csudo yum install centos-release-scl-rh7中的配置

为了方便clang-tidy在项目中的使用,可以在根目录的CMakeLists.txt添加如下配置

# 用于输出clang-tidy需要用到的compile_commands.json文件# 这一行需要放在add_subdirectory/aux_source_directory之前set(CMAKE_EXPORT_COMPILE_COMMANDS ON)set(CLANG_SEARCH_PATH "/usr/local/bin" "/usr/bin" "/usr/local/opt/llvm/bin" "/usr/local/opt/llvm@8/bin" "/usr/local/Cellar/llvm/8.0.1/bin")if (NOT DEFINED CLANG_TIDY_BIN)# attempt to find the binary if user did not specifyfind_program(CLANG_TIDY_BINNAMES clang-tidy clang-fidy-8HINTS ${CLANG_SEARCH_PATH})endif ()if ("${CLANG_TIDY_BIN}" STREQUAL "CLANG_TIDY_BIN-NOTFOUND")message(WARNING "couldn't find clang-tidy.")else ()message(STATUS "found clang-fidy at ${CLANG_TIDY_BIN}")endif ()# 添加clang-tidy命令add_custom_target(clang-tidy COMMAND python ${CMAKE_SOURCE_DIR}/run-clang-tidy.py# run LLVM's clang-tidy script-clang-tidy-binary ${CLANG_TIDY_BIN} # using our clang-tidy binary-p ${CMAKE_BINARY_DIR}# using csudo yum install centos-release-scl-rh7's generated compile commands)

执行csudo yum install centos-release-scl-rh7获取到Makefile后,在build目录下执行sudo yum install centos-release-scl-rh7 clang-tidy, 即可对整个项目进行代码分析。

ccache加速编译

随着项目代码量越来越多,编译花费的时间会很长,在调试代码时,我们可能只改了一行代码,每次要编译个几分钟。这个时候就轮到ccache登场了。它将在第一遍编译时多花几秒钟,但接下来就会使编译成倍(5-10倍)的提速。

ccache 的基本原理是通过将头文件高速缓存到源文件之中而改进了构建性能,因而通过减少每一步编译时添加头文件所需要的时间而提高了构建速度。

ccache安装sudo yum install centos-release-scl-rh9结合csudo yum install centos-release-scl-rh7使用

在根目录的CMakeLists.txt加上下面这段代码

sudo yum install llvm-toolset-7-git-clang-format0

重新进行编译,会发现第一遍还是比较久,但之后的编译速度就会变的很快了。

文章涉及到的代码文件可直接查看CProxy,欢迎fork and star!

原文:https://juejin.cn/post/7102308278884892685
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
山东沃尔德集团集团所辖公司介绍 齐鲁银行无忧贷和市民贷哪个好 什么叫补按揭 后按揭贷款什么意思 买房者续按揭有什么危害 加按揭是什么意思 八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 得了白血病,能报销吗,我现在急需要治疗费,大家给我想想办法吧_百度知 ... 良好代码风格:在VSCode中使用clang-format 需要进行白血病筹款,大家有比较好的推荐吗 专业的白血病筹款平台怎么样,可以筹款吗 手机、平板移动化的时代,还有必要用「电子阅读器」看书吗?百元好物推... 玄关处不能放什么 玄关万万不可摆这些东西,否则家财再多都没用,迟早败光 南平庵山景区有哪些主要景点? 红萝卜叶子晒干了喂牛好吗 bim模型是什么 IE网页设置自定义页眉设置&w&b页码,&p/&P,但是总之只显示前两个字符&w... 为什么我的电脑有些游戏不能玩 跳出后直接自动关闭 还有有些网页上的... 怎样对被害妄想症患者进行心理疏导 为什么我的电脑玩网页游戏没有图片? 为什么我的电脑打开一些网页或者游戏的登录界面有些图片显示不出来?不... ...有时出现红色的竖条,有时出现模糊图像,如何维修? TCL电视,这两天突然出现图像里有些黑的部位,变红了,是什么情况?类似于... 2019年3月5日买了yeechuiH18一锤手机,第一天用就黑屏卡的不要,不要的... 硝基乙烷是酸性吗 过完户,对方没拿到房产证,我不想卖了,该怎么办? 白血病可以通过爱心筹筹款,请问怎么样啊 VSCode常用设置 白血病筹款哪个平台不错啊? 就是之前wps插入音标的那个问题 请问慢友帮爱心筹筹钱是要自己去发布消息吗?谁知道? 10代雅阁是哪一年推出的? 在慢友帮爱心筹上发起筹款后,就会有人来捐钱吗?谁了解啊,说下呗 怀孕后婆婆该怎么安慰? 女人怀孕的时候,婆婆对你说什么证明她把你当成了闺女? 求这套LR幻化出处 翡翠种水八个等级价格表 ...起动时哼哼直响 就是不着 怎么回事阿 谢谢啦 南京华途威电子商务有限公司怎么样? 七星关区田坎乡张姓族人 ...关于质量保修制度的规定,下列关于最低保修期限说法错误的是... ...开发企业对商品住宅最低保修期限的说法,正确的是( )。 施工合同约定工程保修期限低于法定最低期限的条款是否有效 关于建筑工程的保修有何规定 ...说明书制度的规定》中,最低保修项目和保修期限为( )等。 三轮摩托车打不起来火,化油器好好地,火花塞好好地