day16-使用CMake工程化
# day16-使用CMake工程化
最开始只想实现功能,而忽视其他,但是随着文件越来越多,项目的管理就愈加繁杂,例如common.h与tcp并没有关系,因此,想要将其分离,最终还是编写了简单的CMakeLists.txt进行管理
在当前的版本中,一共主要有两个文件夹,base文件夹存放基础的组件,tcp存放TCP的地层文件
include_directories(
base
tcp
)
1
2
3
4
2
3
4
在编译,可以根据不同的环境设置不同的编译参数:
SET(CMAKE_CXX_FLAGS "-g -Wall -Werror -std=c++14")
set(CMAKE_CXX_COMPILER "g++")
set(CMAKE_CXX_FLAGS_DEBUG "-O0")
1
2
3
2
3
最后我们只需要收集对应目录下的所有源文件并编译连接即可,最后
# 查找包
find_package(Threads REQUIRED)
aux_source_directory(base SRC_LIST1)
aux_source_directory(tcp SRC_LIST2)
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/test/)
# 指定生成目标
add_executable(echoserver test/echo_server.cpp ${SRC_LIST1} ${SRC_LIST2})
# 添加连接库 主要针对多线程
target_link_libraries(echoserver ${CMAKE_THREAD_LIBS_INIT})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
配置好CMakeLists.txt之后,就可以尝试编译项目,首先创建build文件夹,防止文件和项目混在一起。
mkdir build
cd build
1
2
2
然后使用cmake生成Makefile:
cmake ..
1
然后使用make指令即可生成对应的可执行文件
make
1
生成的可知性文件被放在build/test中,只需要使用./test/echoerver即可运行服务器
这是一个非常简单的CMakeLists.txt,只是保证了当前项目可以运行起来,如果需要更加复杂的变化,就需要学习相关的代码,并查阅相应的资料了
编辑 (opens new window)
上次更新: 2025/05/21, 06:42:57