cmake_minimum_required (VERSION 3.0)
project(mymuduo)
# mymuduo最终编译成so动态库,设置动态库的路径,放在根目录的Lib文件夹下面
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
# 设置调试信息 以及启动C++11语言标准
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")
# 定义参与编译的源代码文件
aux_source_directory(. SRC_LIST)
# 编译生成动态库mymuduo
add_library(mymuduo SHARED ${SRC_LIST})
cmake_minimum_required (VERSION 3.0)
这行代码设置了运行此 CMake 配置文件所需的最低 CMake 版本
project(mymuduo)
这行代码定义了一个名为 mymuduo
的项目
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
这行代码设置了生成的动态库(共享库)的输出路径
${PROJECT_SOURCE_DIR}
是一个 CMake 内置变量,表示 CMakeLists.txt 文件所在的目录,lib
是子目录。因此,这行代码指定所有生成的库文件(如 .so
文件)都会被放置在项目根目录下的 lib
文件夹中
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -fPIC")
-g
:生成调试信息,用于调试程序。-std=c++11
:启用 C++11 标准,以使用 C++11 的新特性。-fPIC
:生成位置无关代码(Position-Independent Code),这对于创建共享库(动态库)是必需的。
aux_source_directory(. SRC_LIST)
这行代码查找当前目录(.
)中的所有源文件,并将它们添加到变量 SRC_LIST
中。aux_source_directory
是一个 CMake 命令,用于将指定目录中的所有源文件(如 .cpp
文件)列出。
add_library(mymuduo SHARED ${SRC_LIST})
这行代码将 SRC_LIST
中的所有源文件编译成一个名为 mymuduo
的共享库(动态库)。SHARED
关键字指定要创建的是一个共享库(而非静态库)。最终生成的库文件会被输出到之前指定的 LIBRARY_OUTPUT_PATH
(即项目根目录下的 lib
文件夹中)。
注意:将库文件放在根目录的lib目录下,编译过程产生的临时文件放在build目录下