Cmake构建自动化编译环境
完整项目文件结构:
一个完整的项目应该包括如下文件结构:
1 | ProjectName/ |
- bin:生成的可执行文件
- lib:生成的中间库文件
- include:
- src:
- build:编译过程中产生的临时文件
- test/example:示意文件
- thridparty:第三方库文件
- CMakeLists.txs:
- autobuild.sh:一键编译,其实就是执行的cmake文件
- license:
- readme:
ChatServer文件结构
1 | ChatServer/ |
CMakeLists.txt文件解释
从顶层开始,每一个子目录下都有自己的CMakeLists.txt文件.下面是每一层的CMakeLists.txt文件,非常不完善,正在补充中…
- 顶层CMakeLists,路径:chatserver/CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17cmake_minimum_required(VERSION 3.0)
project(chat)
# 配置编译选项
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)
# 添加子目录
#配置最终的可执行文件的输出路径,PROJECT_SOURCE_DIR表示当前项目的根目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#配置头文件的搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${PROJECT_SOURCE_DIR}/include/server)
#加载子目录,子目录下也需要有CMakeLists.txt文件,子目录都写在src文件下
add_subdirectory(src) - src中CMakeLists,路径:chatserver/src/CMakeLists.txt
1
2#添加子目录,在server目录下也有一个CMakeLists.txt文件
add_subdirectory(server) - src/server中CMakeLists,路径:chatserver/src/server/CMakeLists.txt
1
2
3
4
5
6#定义了一个SRC_LIST变量,包含当前目录下所有的源文件
aux_source_directory(. SRC_LIST)
#由所有源码生成可执行文件,指定生成可执行文件的名称为ChatServer
add_executable(ChatServer ${SRC_LIST})
#指定可执行文件需要链接时所依赖的库,muduo_net muduo_base pthread
target_link_libraries(ChatServer muduo_net muduo_base pthread) - src/client中CMakeLists,路径:chatserver/src/client/CMakeLists.txt执行命令:cmake . 或者 cmake ..
1
2
3
4
5
6
7# 定义了一个SRC_LIST变量,包含了该目录下所有的源文件
aux_source_directory(. SRC_LIST)
# 指定生成可执行文件
add_executable(ChatClient ${SRC_LIST})
# 指定可执行文件链接时需要依赖的库文件
target_link_libraries(ChatClient pthread)
在哪里执行cmake,就会在哪里生成中间文件和可执行文件
因此可以进入build目录执行cmake ..命令,这样生成的文件就在build目录下