详解cmake简单语法与使用

本文介绍了CMake的基础使用流程,包括安装、创建CMakeLists.txt、配置步骤以及关键命令示例,强调了现代CMake实践中的模块化和透明性原则。
摘要由CSDN通过智能技术生成

注意:这是一篇cmake入门浅显的文章,深入学习的话没必要阅读。
CMake的使用流程及其语法非常丰富(其实就是过于灵活,一个项目一个风格,看上去相当麻烦),下面逐步介绍一些核心概念和常用命令(语法太多,只写一点皮毛),并结合示例代码解释其功能:

CMake的使用流程主要分为以下几个步骤:

使用流程

  1. 安装CMake

    • 在Linux系统中,可以通过包管理器(如apt、yum)安装。
    • 在macOS中,可以通过Homebrew安装。
    • 在Windows系统中,可以从CMake官方网站下载安装包或者二进制分发版安装。
  2. 创建CMakeLists.txt
    在项目的根目录下创建一个名为CMakeLists.txt的文本文件,它是CMake的核心配置文件。

  3. 编写CMakeLists.txt
    文件中定义了一系列指令来描述如何构建项目,包括但不限于源文件列表、库依赖、编译选项等。

  4. 初始化构建目录
    在项目根目录下创建一个专门用来存放构建输出的目录(例如:build)。

  5. 运行CMake
    在构建目录中运行CMake,指定源码目录和相关的构建选项。例如:

    mkdir build
    cd build
    cmake ..
    

    可以附加额外的参数来选择生成器类型(如 -G "Visual Studio 15 2017")或者设置变量(如 -DCMAKE_BUILD_TYPE=Debug)。

  6. 构建项目
    使用CMake生成的构建系统进行构建:

    cmake --build .
    # 或在Windows上针对Visual Studio使用
    cmake --build . --config Debug
    

CMakeLists.txt语法示例

以下是一个简化的CMakeLists.txt文件示例:

# 指定CMake最小版本
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和语言
project(MyProject CXX)

# 添加源文件,这里假设有两个源文件
aux_source_directory(. SRC_LIST) # 这一行用于自动收集目录下所有源文件(现代CMake推荐显式列出源文件)
# 或者明确指定源文件
set(SRC_LIST main.cpp mylib.cpp)

# 创建一个可执行文件目标
add_executable(MyApp ${SRC_LIST})

# 添加链接库(假设有一个名为mylib的静态库)
add_library(mylib STATIC src/mylib.cpp)
target_include_directories(mylib PUBLIC include) # 添加公共头文件路径
target_link_libraries(MyApp mylib) # 将mylib链接到可执行文件

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 查找并链接第三方库(如OpenCV)
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
    include_directories(${OpenCV_INCLUDE_DIRS})
    target_link_libraries(MyApp ${OpenCV_LIBRARIES})
endif()

# 设置安装规则(如果需要)
install(TARGETS MyApp DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)
  • cmake_minimum_required确保CMake版本兼容性。
  • project定义项目名和使用的编程语言。
  • aux_source_directory或直接add_executable后的列表用于指定项目源文件。
  • add_executable创建可执行文件的目标。
  • add_library定义库文件目标。
  • target_include_directories设定目标的头文件搜索路径。
  • target_link_libraries链接所需的库到目标。
  • set(CMAKE_CXX_STANDARD)设置C++语言标准级别。
  • find_package用于查找并引入第三方库,如果找到则设置其头文件目录和链接库。
  • install用于定义安装规则,指定哪些目标和文件应在安装时复制到相应的位置。

注意,现代CMake实践鼓励使用target_*系列命令而非全局的include_directorieslink_directories命令,以便更好地维护构建的透明性和模块化。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值