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 库的示例程序。

posted @ 2023-06-26 10:16  言叶以上  阅读(67)  评论(0编辑  收藏  举报