CMake基础(三) - Cmake实战
一个实战教程,通过一个具体的示例来演示如何使用 CMake 构建和管理一个 C++ 项目。
这里有一个简单的数学库,其中包含两个源文件 math.cpp 和 math.h,并且有一个示例程序 main.cpp 使用该库。
以下是项目的目录结构:
- MyMathLib
- CMakeLists.txt
- src
- main.cpp
- mathlib
- CMakeLists.txt
- math.cpp
- math.h
步骤 1: 创建项目目录和文件
首先,在您选择的位置创建名为 MyMathLib 的文件夹,并在其中创建上述目录结构。
步骤 2: 编写 mathlib/CMakeLists.txt 文件
在 mathlib 目录下创建 CMakeLists.txt 文件,并添加以下内容:
# 添加库文件
add_library(Math math.cpp math.h)
# 设置 Math 库的导出路径
set_target_properties(Math PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)
# 添加 Math 库的包含路径
target_include_directories(Math PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
${CMAKE_BINARY_DIR}
表示 CMake 构建系统的根目录路径,它用于引用构建过程中生成的文件、目录或路径。${CMAKE_CURRENT_SOURCE_DIR}
是一个 CMake 变量,表示当前正在处理的 CMakeLists.txt 文件所在的目录路径target_include_directories
函数用于向目标(例如库或可执行文件)添加包含路径, 告诉 CMake 在编译 Math 库时,在该目录中查找头文件PUBLIC
参数将这个包含路径设置为公共的,这意味着其他使用 Math 库的目标也可以访问到这个包含路径
这段代码定义了一个名为 Math 的库,将 math.cpp 和 math.h 文件编译为库文件,并将输出路径设置为 ${CMAKE_BINARY_DIR}/lib
。
步骤 3: 编写主 CMakeLists.txt 文件
在项目的根目录下创建 CMakeLists.txt 文件,并添加以下内容:
# 设置项目名称和版本号
project(MyMathLib VERSION 1.0)
# 添加可执行文件
add_executable(MyExecutable src/main.cpp)
# 添加 mathlib 子目录
add_subdirectory(mathlib)
# 链接 Math 库到可执行文件
target_link_libraries(MyExecutable Math)
这段代码定义了项目名称和版本号,并添加了一个名为 MyExecutable 的可执行文件,将 mathlib 子目录添加为子项目,并链接 Math 库到可执行文件。
步骤 4: 构建项目
现在,打开终端,切换到项目根目录,并执行以下命令:
mkdir build
cd build
cmake ..
这将在 build 文件夹中生成构建文件。
接下来,执行以下命令来编译和构建项目:
cmake --build .
这将使用生成的构建文件来编译和构建项目。
步骤 5: 运行示例程序
在构建成功后,您可以在 build 文件夹中找到生成的可执行文件 MyExecutable。执行以下命令来运行示例程序:
./MyExecutable
这样,您就成功构建并运行了使用 Math 库的示例程序。