# 第2章-项目目录构建
首先在一切开始之前,我们应该将最基本的项目架构创建出来。
1)创建Lars代码总目录
```bash
$cd ~/
$mkdir Lars
```
2) 创建一个模块Lars_reactor
lars_reactor是一个网络IO库,是我们要实现的,我们就先以它作为第一个子项目进行构建。
```bash
$mkdir lars_reactor
```
然后在lars_reactor模块下创建一系列文件,如下
```bash
.
├── example
│ └── testlib
│ ├── hello_lars.cpp
│ └── Makefile
├── include
│ └── tcp_server.h
├── lib
├── Makefile
└── src
└── tcp_server.cpp
```
3)代码编写
> src/tcp_server.c
```c
#include <iostream>
void lars_hello()
{
std::cout <<"lars hello" <<std::endl;
}
```
> src/tcp_server.h
```c
#pragma once
void lars_hello();
```
我们要生成一个lib库文件liblreactor.a,来提供一些reactor模块的API接口。
生成liblreactor.a的Makefile如下
> lars_reactor/Makefile
```makefile
TARGET=lib/liblreactor.a
CXX=g++
CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated
SRC=./src
INC=-I./include
OBJS = $(addsuffix .o, $(basename $(wildcard $(SRC)/*.cpp)))
$(TARGET): $(OBJS)
mkdir -p lib
ar cqs $@ $^
%.o: %.cpp
$(CXX) $(CFLAGS) -c -o $@ $< $(INC)
.PHONY: clean
clean:
-rm -f src/*.o $(TARGET)
```
4)编译
```bash
$cd lars/lars_reactor/
$make
$g++ -g -O2 -Wall -fPIC -Wno-deprecated -c -o src/tcp_server.o src/tcp_server.cpp -I./include
mkdir -p lib
ar cqs lib/liblreactor.a src/tcp_server.o
```
我们会在lib下得到一个liblreactor.a库文件。
5)调用liblreactor.a接口
```bash
$cd lars/lars_reactor/
$mkdir example/testlib -p
$cd example/testlib/
```
> hello_lars.cpp
```c
#include "tcp_server.h"
int main() {
lars_hello();
return 0;
}
```
> Makefile
```makefile
CXX=g++
CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated
INC=-I../../include
LIB=-L../../lib -llreactor
OBJS = $(addsuffix .o, $(basename $(wildcard *.cc)))
all:
$(CXX) -o hello_lars $(CFLAGS) hello_lars.cpp $(INC) $(LIB)
clean:
-rm -f *.o hello_lars
```
编译
```bash
$ make
g++ -o hello_lars -g -O2 -Wall -fPIC -Wno-deprecated hello_lars.cpp -I../../include -L../../lib -llreactor
```
执行
```c
$ ./hello_lars
lars hello
```
我们现在一个基本的项目目录就构建好了,大致如下
```bash
Lars/
├── lars_reactor
│ ├── example
│ │ └── testlib
│ │ ├── hello_lars
│ │ ├── hello_lars.cpp
│ │ └── Makefile
│ ├── include
│ │ └── tcp_server.h
│ ├── lib
│ │ └── liblreactor.a
│ ├── Makefile
│ └── src
│ ├── tcp_server.cpp
│ └── tcp_server.o
└── README.md
```
---
### 关于作者:
作者:`Aceld(刘丹冰)`
mail: [danbing.at@gmail.com](mailto:danbing.at@gmail.com)
github: [https://github.com/aceld](https://github.com/aceld)
原创书籍: [https://www.kancloud.cn/@aceld](https://www.kancloud.cn/@aceld)
![](https://img.kancloud.cn/b0/d1/b0d11a21ba62e96aef1c11d5bfff2cf8_227x227.jpg)
- 一、Lars系统概述
- 第1章-概述
- 第2章-项目目录构建
- 二、Reactor模型服务器框架
- 第1章-项目结构与V0.1雏形
- 第2章-内存管理与Buffer封装
- 第3章-事件触发EventLoop
- 第4章-链接与消息封装
- 第5章-Client客户端模型
- 第6章-连接管理及限制
- 第7章-消息业务路由分发机制
- 第8章-链接创建/销毁Hook机制
- 第9章-消息任务队列与线程池
- 第10章-配置文件读写功能
- 第11章-udp服务与客户端
- 第12章-数据传输协议protocol buffer
- 第13章-QPS性能测试
- 第14章-异步消息任务机制
- 第15章-链接属性设置功能
- 三、Lars系统之DNSService
- 第1章-Lars-dns简介
- 第2章-数据库创建
- 第3章-项目目录结构及环境构建
- 第4章-Route结构的定义
- 第5章-获取Route信息
- 第6章-Route订阅模式
- 第7章-Backend Thread实时监控
- 四、Lars系统之Report Service
- 第1章-项目概述-数据表及proto3协议定义
- 第2章-获取report上报数据
- 第3章-存储线程池及消息队列
- 五、Lars系统之LoadBalance Agent
- 第1章-项目概述及构建
- 第2章-主模块业务结构搭建
- 第3章-Report与Dns Client设计与实现
- 第4章-负载均衡模块基础设计
- 第5章-负载均衡获取Host主机信息API
- 第6章-负载均衡上报Host主机信息API
- 第7章-过期窗口清理与过载超时(V0.5)
- 第8章-定期拉取最新路由信息(V0.6)
- 第9章-负载均衡获取Route信息API(0.7)
- 第10章-API初始化接口(V0.8)
- 第11章-Lars Agent性能测试工具
- 第12章- Lars启动工具脚本