例 经典的echo回显服务
本文以陈硕老师的Linux多线程服务端编程为参考书
编译运行步骤
(1) 按照 链接1 所述步骤安装Muduo网络库,之后 按照 链接2所述步骤 设置头文件链接和库文件链接
首先,echo服务的源代码在文件 /muduo-master/example/simple/echo 中,其中包含三个文件,分别是echo.cc echo.h main.cc
接下来的操作假设读者已经完成了前面的(1)中的步骤,并且操作成功。
(2)修改源代码
- 按照图中的内容 修改echo.h头文件 部分头文件生命
- 修改echo.cc文件的 部分头文件声明
- 修改main.cc 部分头文件声明
(3)编译,其中的任意一种即可
1)build with GNU make
- 在 /muduo-master/example/simple/echo 文件加下新建Makefile 文件
# touch Makefile
Makefile 文件的内容为
MUDUO_DIRECTORY ?= /usr
MUDUO_INCLUDE = $(MUDUO_DIRECTORY)/include
MUDUO_LIBRARY = $(MUDUO_DIRECTORY)/lib
CXXFLAGS = -g -O0 -Wall -Wextra -Werror -std=c++11\
-Wconversion -Wno-unused-parameter \
-Wold-style-cast -Woverloaded-virtual \
-Wpointer-arith -Wshadow -Wwrite-strings \
-march=native -rdynamic \
-I$(MUDUO_INCLUDE)
LDFLAGS = -L$(MUDUO_LIBRARY) -lmuduo_net -lmuduo_base -lpthread -lrt
all: echo
clean:
rm -f echo core
echo: echo.* main.cc
g++ $(CXXFLAGS) -o $@ $^ $(LDFLAGS)
.PHONY: all clean
然后在此文件夹下运行
# make
2)build with CMake
- 建立CMakeLists.txt
# touch CMakeLists.txt
- CMakeLists.txt 文件内容
cmake_minimum_required(VERSION 2.6)
project(echo CXX)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "debug")
endif()
if(NOT MUDUO_PATH)
set(MUDUO_PATH "/usr")
endif()
set(CXX_FLAGS
-g
-Wall
-Wextra
-Werror
-Wconversion
-Wno-unused-parameter
-Wold-style-cast
-Woverloaded-virtual
-Wpointer-arith
-Wshadow
-Wwrite-strings
-march=native
-std=c++0x
-rdynamic
)
string(REPLACE ";" " " CMAKE_CXX_FLAGS "${CXX_FLAGS}")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -finline-limit=1000 -DNDEBUG")
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
find_path(Muduo_INCLUDE_DIR muduo "${MUDUO_PATH}/include")
find_path(Muduo_LIBRARY_DIR libmuduo_net.a "${MUDUO_PATH}/lib")
set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} ${Muduo_LIBRARY_DIR})
message(STATUS ${Muduo_INCLUDE_DIR})
message(STATUS ${Muduo_LIBRARY_DIR})
include_directories(${Muduo_INCLUDE_DIR})
find_library(muduo_base muduo_base)
find_library(muduo_net muduo_net)
message(STATUS ${muduo_base})
message(STATUS ${muduo_net})
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${PROJECT_SOURCE_DIR})
set(SRC_CODE echo.cc echo.h main.cc) #这里就是源代码
add_executable(echo ${SRC_CODE})
target_link_libraries(echo ${muduo_net})
target_link_libraries(echo ${muduo_base})
target_link_libraries(echo pthread rt)
- 在当前目录建立build文件夹,并编译源文件
# mkdir build
# cd build
# cmake ..
# make
- 此时 可执行文件echo 在build文件夹的bin文件下
3)直接在命令行建立可执行文件
# g++ -g -O0 -Wall -Wextra -Werror -std=c++11 -Wconversion -Wno-unused-parameter -Wold-style-cast -Woverloaded-virtual -Wpointer-arith -Wshadow -Wwrite-strings -march=native -rdynamic -I/usr/include -o echo echo.cc echo.h main.cc -L/usr/lib -lmuduo_net -lmuduo_base -lpthread -lrt