cmake概述,及其常用命令

1.cmake

CMake是一个跨平台的安装(编译)工具,它允许开发者使用简单的语句来描述所有平台的安装(编译)过程。以下是关于CMake的详细介绍:

一、基本概述

  • 定义:CMake是一个开源、跨平台的自动化构建系统,它使用CMakeLists.txt脚本文件来定义构建过程。
  • 功能:CMake能够生成标准的构建文件(如Makefile、Visual Studio项目文件等),支持多种构建工具和集成开发环境(IDE),如Make、Ninja、Visual Studio、Xcode等。
  • 特点:CMake具有跨平台性、模块化和可扩展性,能够自动检测系统和库的可用性,简化项目配置过程。

二、主要特点

  1. 跨平台性:CMake支持在多个操作系统上运行,包括Linux、Windows、macOS等,使得跨平台开发更加容易。
  2. 生成器:CMake不直接构建出最终的软件,而是生成标准的构建文件(如Makefile、Visual Studio项目文件等),然后再使用相应的构建工具进行编译。
  3. 自动检测和配置:CMake能够自动检测系统和库的可用性,简化项目配置过程,帮助开发者找到所需的依赖项。
  4. 模块化和可扩展:CMake的配置是基于模块的,开发者可以编写自定义的CMake模块以满足特定需求。这使得CMake非常灵活和可扩展。
  5. 简洁的CMakeLists.txt文件:项目的配置信息通常存储在CMakeLists.txt文件中,这是一种清晰、易于维护的方式来描述项目的结构和构建规则。

三、使用场景

CMake广泛用于各种大型项目的构建过程中,特别是当项目需要跨平台构建时。例如,许多开源项目如VTK、ITK、PCL等都使用CMake作为构建系统。

四、基本用法

  1. 编写CMakeLists.txt文件:定义项目名称、源文件、库依赖等信息。
  2. 生成构建文件:在命令行中执行cmake命令,指定CMakeLists.txt文件所在路径和构建目录(可选)。CMake将根据CMakeLists.txt文件生成相应的构建文件。
  3. 构建项目:使用生成的构建文件(如Makefile、Visual Studio项目文件等)来构建项目。这通常涉及执行make(或相应的构建命令)来编译源代码并生成可执行文件或库。

五、安装与升级

CMake的安装和升级可以通过多种方式完成,包括使用包管理器(如apt-get、yum等)、下载源码包编译安装等。具体方法取决于操作系统和用户的需求。

六、总结

CMake是一个功能强大的跨平台构建系统,它使用简单的语句来描述所有平台的安装(编译)过程。通过生成标准的构建文件和使用自动检测与配置功能,CMake简化了跨平台开发的过程,并提高了开发效率。随着开源项目的不断发展壮大,CMake在软件构建领域的应用也越来越广泛。

2.cmake常用命令 

CMake是一个跨平台的自动化构建系统,它使用CMakeLists.txt文件来描述项目的构建过程。在CMake中,存在多种常用命令,这些命令用于定义项目结构、配置编译选项、添加库依赖等。以下是一些CMake的常用命令及其基本用法:

1. cmake_minimum_required

  • 功能:指定CMake的最低版本要求。
  • 语法cmake_minimum_required(VERSION major.minor [patch [tweak]])
  • 示例cmake_minimum_required(VERSION 3.10)

2. project

  • 功能:设置项目工程名字,并可指定工程的版本、工程描述、web主页地址、支持的语言等。
  • 语法project(<project_name> [VERSION <version>] [DESCRIPTION <description>] [HOMEPAGE_URL <url>] [LANGUAGES <language>...])
  • 示例project(MyProject VERSION 1.0 LANGUAGES CXX)

3. add_executable

  • 功能:用于创建一个可执行文件的目标,将源代码文件编译为可执行文件。
  • 语法add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
  • 示例add_executable(myapp main.cpp)

4. add_library

  • 功能:用于将源代码文件编译为库文件。
  • 语法add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
  • 示例add_library(mylibrary STATIC mylibrary.cpp)

5. target_include_directories

  • 功能:为指定的目标(可执行文件或库)添加包含目录,以便编译器在编译时能够找到相应的头文件。
  • 语法target_include_directories(<target> [SYSTEM|BEFORE] [INTERFACE|PUBLIC|PRIVATE] [items1...]...)
  • 示例target_include_directories(mylibrary PUBLIC include)

6. link_directories

  • 功能:指定链接器搜索库文件的目录。
  • 语法link_directories(directory1 directory2 ...)
  • 注意:在现代CMake中,更推荐使用target_link_libraries命令结合IMPORTED目标来链接库,因为这种方法更加灵活和清晰。

7. target_link_libraries

  • 功能:为指定的目标(可执行文件或库)链接库文件。
  • 语法target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [...])
  • 示例target_link_libraries(myapp PRIVATE mylibrary)

8. set

  • 功能:设置变量的值。CMake中的变量可以包含字符串、路径、列表等数据类型。
  • 语法set(<variable> <value> [CACHE <type> <docstring> [FORCE]])
  • 示例set(CMAKE_CXX_STANDARD 11)

9. include_directories

  • 功能:添加包含目录给编译器,以便编译器在编译源文件时能够找到相应的头文件。
  • 语法include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
  • 注意:在现代CMake中,更推荐使用target_include_directories命令,因为它允许更细粒度的控制。

10. message

  • 功能:向终端输出信息。
  • 语法message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)
  • 示例message(STATUS "This is a status message.")

11. file

  • 功能:提供文件操作功能,如读写文件、文件系统操作、路径转换等。
  • 语法file(子命令 <参数> ...)
  • 示例file(GLOB MAIN_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)

12. aux_source_directory

  • 功能:查找指定目录下的所有源文件,并将它们存储到一个变量中。
  • 语法aux_source_directory(<dir> <variable>)
  • 示例aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_LIST)

13. add_subdirectory

  • 功能:向项目中添加子目录,以便在该子目录中构建其他CMake项目。
  • 语法add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
  • 示例add_subdirectory(subdirectory)

总结

以上列出的命令是CMake中最为常用的一些命令,它们涵盖了项目配置、文件操作、目标添加和链接等多个方面。通过合理使用这些命令,可以高效地构建出复杂的跨平台项目。需要注意的是,随着CMake版本的更新,一些命令的用法可能会发生变化,因此建议查阅最新的CMake文档以获取最准确的信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值