Skip to content

开发环境搭建

Hai Liang Wang edited this page Dec 9, 2021 · 13 revisions

Clause

Chatopera Language Understanding Service

https://github.com/chatopera/clause

准备条件

参考文档前提准备

对于操作系统和硬件,务必按照以上链接准备。

下载代码

git clone https://github.com/chatopera/clause.git

默认为 osc 分支,管理源代码。

安装第三方包

cd clause # 进入开发根目录
./admin/install-3rd/system.sh # 面向操作系统层面的依赖,每个操作系统只需要执行一次,需要免密码使用sudo命令的支持。
./admin/install-3rd/user.sh   # 项目层面的的依赖,每个开发根目录下都执行一次。

以上两个脚本完成了下列依赖的安装:

  • CMake, Node.js, gcc
  • Boost
  • thrift
  • jsoncpp
  • libevent
  • Eigen3
  • gflags
  • protobuf
  • gtest
  • glog
  • gperftools
  • thrift
  • activemq

其中,系统层面的依赖安装到/usr/local/ 目录中,项目层面的依赖安装在clause/libclause/include中。查看 thirdparty 获得更多第三方包。

  • 关于系统层面依赖的更多介绍
./admin/install-3rd/system.sh

该脚本大约执行 20mins ~ 50mins, 顺序执行cmake/system里的脚本,一些脚本如下:

script description dependencies
001.corretto-jdk.sh install amazon jdk, Default JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto None
001.nodejs.sh install nodejs None
002.maven.sh install maven3 jdk
  • 项目层面的依赖
./admin/install-3rd/user.sh

该脚本大约执行30mins,顺序执行 cmake/user 下的脚本。

  • 单独安装某一个依赖

也可以单独的对某个依赖进行安装,这时执行cmake/usercmake/system下的脚本。

安装脚本执行过程可能出现的问题

g++: internal compiler error: Killed visibility-hidden/read_graphviz_new.o

原因:内存不足 解决方案:增加内存,查看依赖环境硬件配置

开发

### 编译
mkdir -p build/debug
cd build/debug
cmake ../..
make

目录结构

.
├── CMakeLists.txt        # 顶层CMake文件
├── Doxyfile              # API文档生成描述文件
├── Doxyfile.sh           # API文档生成脚本
├── LICENSE               # 软件授权声明
├── README.md             # 顶层文档
├── admin                 # 项目管理命令
│   ├── dev               # 开发辅助脚本
│   ├── docker            # docker镜像相关
│   ├── formatter.sh      # 格式化代码
│   ├── generator.sh      # 生成CMake元数据
│   ├── install-3rd       # 安装第三方依赖
│   ├── localrc.sample    # 配置本地环境,需要开发者复制为localrc
│   ├── precompile.sh     # 在编译应用前检查条件
│   └── release.sh        # 发布新的docker-compose版本
├── bin                   # 一些依赖的可执行命令安装路径
├── build                 # 调试程序的输出路径
├── cmake                 # CMake相关
│   ├── default.cmake     # 依赖关系描述
│   ├── miscs             # 杂项
│   ├── modules           # CMake模块化组织依赖
│   ├── system            # 系统层面的依赖安装脚本
│   └── user              # 项目层面依赖的安装脚本
├── docker-compose.yml    # 服务编排描述
├── docs                  # API文档
├── include               # 依赖的头文件目录
├── sample.env            # docker服务的环境变量自定义文件,需要开发者复制为.env
├── share                 # 某些依赖输出的文档
├── src                   # 核心代码目录
│   ├── CMakeLists.txt    # 遍历所有子目录,加载为CMake模块
│   ├── clause            # clause模块源码
│   ├── distance          # 文本相似度计算
│   ├── hat-trie          # 构建前缀树存储自定义词典
│   ├── intent            # intent模块源码,提供训练机器人接口
│   ├── jieba             # jieba分词器源码
│   ├── lac               # lac源码,包括训练脚本和论文
│   ├── ner               # crfsuite工具包
│   ├── proto             # protobuf描述文件
│   ├── redis             # 连接redis的工具包
│   ├── sample            # CMake模块的示例程序,用于快速添加新模块
│   ├── sep               # 标点符号,表情和停用词管理
│   ├── sysdicts          # sysdicts模块源码,提供系统词典
│   └── utils             # 常用工具类
├── thirdparty            # 第三方依赖
└── var                   # 数据文件或临时文件
    ├── activemq          # activemq持久化
    ├── assets            # 一些辅助文档
    ├── local             # clause 和 intent 输出的文件路径
    ├── log               # 日志
    ├── mysql             # mysql持久化
    ├── redis             # redis持久化
    └── test              # 测试用的文件

格式化代码

目前,clause使用 Astyle 进行代码格式化, 标准参数在.astylerc中设置。

Astyle也作为系统层面的依赖进行安装,使用./admin/formatter.shsrc目录下的源码进行格式化。

./admin/formatter.sh
cat ./.astylerc # check out settings.
# Find more options
# http://astyle.sourceforge.net/astyle.html#_Usage
--style=google
--indent=spaces=2
--indent-switches
--indent-preprocessor
--break-blocks
--pad-oper
--recursive
--formatted
--suffix=none

代码标准使用 Google C++ Style Guide

帮助

下一步

系统设计与实现

Clause 开发技能之 CMake 进阶教程(一)

Clause 开发技能之 CMake 进阶教程(二)

Clause 开发技能之 CMake 进阶教程(三)