必要的两项内容
cmake_minimum_required(VERSION 2.5)project(mymuduo)
- 这行代码指定了构建项目所需的CMake最低版本为2.5。CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来定义项目的构建过程。
- 定义项目的名称为
mymuduo
。CMake将使用这个名称来生成构建文件,并作为项目目录的根名称。
什么是项目的构建?
C++项目的构建是将源代码转换为可执行程序的过程。这个过程通常包括以下几个关键步骤:
预处理:在编译之前,预处理器会处理所有的宏定义、头文件包含以及条件编译指令。预处理的结果是一个纯粹的C++源文件,去除了所有的预处理指令。
编译:编译器将预处理后的C++源文件翻译成汇编代码。这一步主要是将高级语言转换为更接近机器语言的低级语言。
汇编:汇编器将汇编代码转换为目标机器代码(也称为目标文件或对象文件)。目标文件包含了可以被链接的机器指令,但还不是完整的可执行文件。
链接:链接器将一个或多个目标文件和库文件合并为一个最终的可执行文件。链接器负责解析外部符号、处理库文件以及生成最终的内存地址。
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
- 设置编译生成的动态库(.so文件)的输出路径为项目根目录下的
lib
文件夹。${PROJECT_SOURCE_DIR}
是CMake的一个变量,表示项目的根目录。
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")
- 这行代码向C++编译器的标志(flags)中添加了几个选项:
-g
:启用调试信息,这对于调试构建非常有用。-std=c++11
:指定使用C++11标准。这允许项目使用C++11的新特性。-fPIC
:生成位置无关代码(Position Independent Code),这对于创建动态库是必需的
aux_source_directory(. SRC_LIST)
- 使用
aux_source_directory
命令查找当前目录(.
)下的所有源文件,并将它们存储在变量SRC_LIST
中。这样,CMake就可以知道哪些源文件需要被编译。
add_library(mymuduo SHARED ${SRC_LIST})
- 使用
add_library
命令创建一个名为mymuduo
的动态库。SHARED
关键字指定要创建的是共享库(动态库)。${SRC_LIST}
是之前通过aux_source_directory
命令找到的源文件列表。