首先在一切开始之前,我们应该将最基本的项目架构创建出来。
2.1 创建Lars代码总目录
$cd ~/$mkdir Lars
2.2 创建一个模块Lars_reactor
lars_reactor是一个网络IO库,是我们要实现的,我们就先以它作为第一个子项目进行构建。
$mkdir lars_reactor
然后在lars_reactor模块下创建一系列文件,如下
.├── example│ └── testlib│ ├── hello_lars.cpp│ └── Makefile├── include│ └── tcp_server.h├── lib├── Makefile└── src└── tcp_server.cpp
2.3 代码编写
src/tcp_server.c
#include <iostream>void lars_hello(){std::cout <<"lars hello" <<std::endl;}
src/tcp_server.h
#pragma oncevoid lars_hello();
我们要生成一个lib库文件liblreactor.a,来提供一些reactor模块的API接口。
生成liblreactor.a的Makefile如下
lars_reactor/Makefile
TARGET=lib/liblreactor.aCXX=g++CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecatedSRC=./srcINC=-I./includeOBJS = $(addsuffix .o, $(basename $(wildcard $(SRC)/*.cpp)))$(TARGET): $(OBJS)mkdir -p libar cqs $@ $^%.o: %.cpp$(CXX) $(CFLAGS) -c -o $@ $< $(INC).PHONY: cleanclean:-rm -f src/*.o $(TARGET)
2.4 编译
$cd lars/lars_reactor/$make$g++ -g -O2 -Wall -fPIC -Wno-deprecated -c -o src/tcp_server.o src/tcp_server.cpp -I./includemkdir -p libar cqs lib/liblreactor.a src/tcp_server.o
我们会在lib下得到一个liblreactor.a库文件。
2.5 调用liblreactor.a接口
$cd lars/lars_reactor/$mkdir example/testlib -p$cd example/testlib/
hello_lars.cpp
#include "tcp_server.h"int main() {lars_hello();return 0;}
Makefile
CXX=g++CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecatedINC=-I../../includeLIB=-L../../lib -llreactorOBJS = $(addsuffix .o, $(basename $(wildcard *.cc)))all:$(CXX) -o hello_lars $(CFLAGS) hello_lars.cpp $(INC) $(LIB)clean:-rm -f *.o hello_lars
编译
$ makeg++ -o hello_lars -g -O2 -Wall -fPIC -Wno-deprecated hello_lars.cpp -I../../include -L../../lib -llreactor
执行
$ ./hello_larslars hello
我们现在一个基本的项目目录就构建好了,大致如下
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
