首先在一切开始之前,我们应该将最基本的项目架构创建出来。

2.1 创建Lars代码总目录

  1. $cd ~/
  2. $mkdir Lars

2.2 创建一个模块Lars_reactor

lars_reactor是一个网络IO库,是我们要实现的,我们就先以它作为第一个子项目进行构建。

  1. $mkdir lars_reactor

然后在lars_reactor模块下创建一系列文件,如下

  1. .
  2. ├── example
  3. └── testlib
  4. ├── hello_lars.cpp
  5. └── Makefile
  6. ├── include
  7. └── tcp_server.h
  8. ├── lib
  9. ├── Makefile
  10. └── src
  11. └── tcp_server.cpp

2.3 代码编写

src/tcp_server.c

  1. #include <iostream>
  2. void lars_hello()
  3. {
  4. std::cout <<"lars hello" <<std::endl;
  5. }

src/tcp_server.h

  1. #pragma once
  2. void lars_hello();
  1. 我们要生成一个lib库文件liblreactor.a,来提供一些reactor模块的API接口。

生成liblreactor.a的Makefile如下

lars_reactor/Makefile

  1. TARGET=lib/liblreactor.a
  2. CXX=g++
  3. CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated
  4. SRC=./src
  5. INC=-I./include
  6. OBJS = $(addsuffix .o, $(basename $(wildcard $(SRC)/*.cpp)))
  7. $(TARGET): $(OBJS)
  8. mkdir -p lib
  9. ar cqs $@ $^
  10. %.o: %.cpp
  11. $(CXX) $(CFLAGS) -c -o $@ $< $(INC)
  12. .PHONY: clean
  13. clean:
  14. -rm -f src/*.o $(TARGET)

2.4 编译

  1. $cd lars/lars_reactor/
  2. $make
  3. $g++ -g -O2 -Wall -fPIC -Wno-deprecated -c -o src/tcp_server.o src/tcp_server.cpp -I./include
  4. mkdir -p lib
  5. ar cqs lib/liblreactor.a src/tcp_server.o

我们会在lib下得到一个liblreactor.a库文件。

2.5 调用liblreactor.a接口

  1. $cd lars/lars_reactor/
  2. $mkdir example/testlib -p
  3. $cd example/testlib/

hello_lars.cpp

  1. #include "tcp_server.h"
  2. int main() {
  3. lars_hello();
  4. return 0;
  5. }

Makefile

  1. CXX=g++
  2. CFLAGS=-g -O2 -Wall -fPIC -Wno-deprecated
  3. INC=-I../../include
  4. LIB=-L../../lib -llreactor
  5. OBJS = $(addsuffix .o, $(basename $(wildcard *.cc)))
  6. all:
  7. $(CXX) -o hello_lars $(CFLAGS) hello_lars.cpp $(INC) $(LIB)
  8. clean:
  9. -rm -f *.o hello_lars

编译

  1. $ make
  2. g++ -o hello_lars -g -O2 -Wall -fPIC -Wno-deprecated hello_lars.cpp -I../../include -L../../lib -llreactor

执行

  1. $ ./hello_lars
  2. lars hello

我们现在一个基本的项目目录就构建好了,大致如下

  1. Lars/
  2. ├── lars_reactor
  3. ├── example
  4. └── testlib
  5. ├── hello_lars
  6. ├── hello_lars.cpp
  7. └── Makefile
  8. ├── include
  9. └── tcp_server.h
  10. ├── lib
  11. └── liblreactor.a
  12. ├── Makefile
  13. └── src
  14. ├── tcp_server.cpp
  15. └── tcp_server.o
  16. └── README.md