Skip to content

开发环境搭建

Samurais edited this page Sep 11, 2019 · 3 revisions

Clause

Chatopera Language Understanding Service

https://github.com/chatopera/clause

准备条件

开发环境需要如下前提条件:

  • Ubuntu 16.04 (*必须),编译代码
  • 开发编辑器,推荐 VSCode,代码的编辑可以在任何操作系统上

下载代码

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

安装第三方包

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 获得更多第三方包。

  • 设置免密码使用sudo
sudo visudo
## Add this line
YOUR_ACCOUNT ALL=NOPASSWD: ALL
  • 关于系统层面依赖的更多介绍
./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下的脚本。

开发

### 编译
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

帮助

License

Copyright 2019 北京华夏春松科技有限公司 https://www.chatopera.com. All rights reserved. This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.

You can’t perform that action at this time.