CMake基础(二) - Cmake进阶

在上一篇基础教程的基础上,这次将介绍一些更进阶的 CMake 功能和常用技巧。

步骤 1: 添加库文件

在许多项目中,您可能需要使用外部库来扩展功能。下面是一个示例,演示如何添加和链接外部库。

假设您的项目需要使用一个名为 "Math" 的数学库。首先,在项目目录下创建一个包含 Math 库源代码的子目录:

- MyProject
    - CMakeLists.txt
    - src
        - main.cpp
    - mathlib
        - CMakeLists.txt
        - math.cpp
        - math.h

接下来,编写 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})

然后,在项目的主 CMakeLists.txt 文件中添加以下内容:

# 添加 mathlib 子目录
add_subdirectory(mathlib)

# 链接 Math 库到可执行文件
target_link_libraries(MyExecutable Math)

这样,Math 库将被编译并链接到主项目中。

步骤 2: 添加编译选项

CMake 允许为特定目标或全局设置编译选项。例如,启用特定的编译器警告或优化选项。

在 CMakeLists.txt 文件中添加以下内容,以设置编译选项:

# 全局编译选项
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2")

# 目标特定编译选项
target_compile_options(MyExecutable PRIVATE -Wextra)

这里,我们通过 set 命令将全局编译选项设置为 -Wall(启用所有警告)和 -O2(优化级别 2)。使用 target_compile_options 命令,您可以为特定目标设置更多的编译选项。

步骤 3: 安装规则

如果您希望将编译后的文件安装到系统目录,以供其他项目使用,可以使用 CMake 的安装规则。

在主 CMakeLists.txt 文件中添加以下内容:

# 安装目标
install(TARGETS MyExecutable DESTINATION bin)

# 安装文件
install(FILES README.md DESTINATION share)

这样,通过运行 cmake --install . 命令,您的项目文件将被安装到指定的目录。

步骤 4: 构建可选功能

有时,您可能希望在构建项目时启用或禁用某些可选功能。CMake 提供了选项和变量来实现这一点。

在主 CMakeLists.txt 文件中添加以下内容:

# 设置选项
option(ENABLE_FEATURE_X "Enable Feature X" ON)

# 根据选项配置
if(ENABLE_FEATURE_X)
    add_definitions(-DFEATURE_X_ENABLED)
    message("Feature X enabled")
else()
    message("Feature X disabled")
endif()

这里,我们使用 option 命令创建了一个名为 ENABLE_FEATURE_X 的选项,并默认为打开状态(ON)。根据选项的值,您可以执行相应的操作,例如添加编译定义或输出消息。

posted @ 2022-07-20 14:21  言叶以上  阅读(1111)  评论(0编辑  收藏  举报