首页 > 其他分享 >cmake使用方法

cmake使用方法

时间:2024-10-13 12:21:07浏览次数:10  
标签:... CMakeLists cmake 使用 CMake txt 方法 ###

CMake 是一个跨平台的构建系统生成器,广泛用于 C++ 项目。它允许开发者编写平台无关的构建脚本(称为 `CMakeLists.txt`),然后在不同的平台上生成对应的构建文件(如 Makefile、Visual Studio 项目文件等)。以下是使用 CMake 的基本步骤和一些常见的用法。

 

### 安装 CMake

首先,你需要安装 CMake。你可以从 CMake 的官方网站下载安装包,或者使用包管理器来安装。例如,在 Ubuntu 上可以使用以下命令:

 

```sh

sudo apt-get update

sudo apt-get install cmake

```

 

在 macOS 上可以使用 Homebrew:

 

```sh

brew install cmake

```

 

在 Windows 上可以从 CMake 官方网站下载安装程序。

 

### 创建 CMakeLists.txt 文件

在你的项目根目录下创建一个名为 `CMakeLists.txt` 的文件。这个文件定义了项目的构建规则。

 

#### 基本的 CMakeLists.txt 示例

```cmake

# 指定 CMake 的最低版本要求

cmake_minimum_required(VERSION 3.10)

 

# 设置项目名称

project(MyProject)

 

# 查找源文件

file(GLOB SOURCES "src/*.cpp")

 

# 添加可执行文件目标

add_executable(MyExecutable ${SOURCES})

 

# 可选:指定编译器标志

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -Wall -Wextra")

```

 

### 使用 CMake 生成构建文件

在命令行中,进入包含 `CMakeLists.txt` 的项目目录,然后创建一个构建目录(通常命名为 `build`),并在该目录中运行 CMake 来生成构建文件。

 

```sh

mkdir build

cd build

cmake ..

```

 

### 构建项目

生成构建文件后,你可以在 `build` 目录中使用相应的构建工具来构建项目。

 

- **在 Unix/Linux/macOS 上**:

  ```sh

  make

  ```

 

- **在 Windows 上**(如果你生成的是 Visual Studio 项目文件):

  ```sh

  cmake --build . --config Release

  ```

 

### 常见的 CMake 命令

- **`cmake_minimum_required(VERSION <version>)`**:指定所需的 CMake 最低版本。

- **`project(<name> [VERSION <major>[.<minor>[.<patch>]]] [DESCRIPTION <description>] [HOMEPAGE_URL <url>] ...)`**:设置项目的基本信息。

- **`add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 [source2 ...])`**:添加一个可执行文件目标。

- **`add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])`**:添加一个库目标。

- **`target_link_libraries(<target> [item1 [item2 [...]]])`**:为某个目标链接库。

- **`find_package(<PackageName> [version] [EXACT] [REQUIRED] [COMPONENTS [componets...]])`**:查找并加载外部库或框架。

- **`include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])`** 或 **`target_include_directories(<target> [SYSTEM] [BEFORE <INTERFACE|PUBLIC|PRIVATE>] [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...]])`**:指定头文件搜索路径。

- **`set(CMAKE_CXX_STANDARD 11)`**:设置 C++ 标准版本。

 

### 更多高级功能

- **自定义变量**:你可以定义自己的变量,并在 CMakeLists.txt 中使用它们。

- **条件语句**:使用 `if()`, `else()`, `elseif()`, `endif()` 进行条件判断。

- **循环语句**:使用 `foreach()` 和 `endforeach()` 进行循环操作。

- **宏和函数**:定义宏和函数以简化和重用代码。

 

### 示例:一个更复杂的 CMakeLists.txt

```cmake

cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0)

 

# 设置 C++ 标准

set(CMAKE_CXX_STANDARD 14)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

 

# 查找源文件

file(GLOB SOURCES "src/*.cpp")

 

# 添加可执行文件目标

add_executable(MyExecutable ${SOURCES})

 

# 添加库

add_library(MyLibrary STATIC src/library.cpp)

 

# 链接库到可执行文件

target_link_libraries(MyExecutable MyLibrary)

 

# 包含目录

target_include_directories(MyExecutable PRIVATE include)

 

# 查找并使用外部库

find_package(Boost REQUIRED COMPONENTS system)

if(Boost_FOUND)

    include_directories(${Boost_INCLUDE_DIRS})

    target_link_libraries(MyExecutable ${Boost_LIBRARIES})

endif()

```

 

标签:...,CMakeLists,cmake,使用,CMake,txt,方法,###
From: https://blog.csdn.net/weixin_43803780/article/details/142688305

相关文章

  • 使用 Lua 进行基础图像识别
    Lua是一门轻量级的嵌入式编程语言,常用于游戏开发、嵌入式系统和快速原型设计。虽然Lua并不像Python那样有大量用于图像处理的库,但借助扩展库和C语言接口,Lua也能用于实现基础的图像识别任务。本文将介绍如何使用Lua实现图像识别中的基本步骤,包括图像加载、灰度转换和简......
  • 使用 Racket 进行基础图像识别
    Racket是一门多范式编程语言,基于Lisp的方言,具有强大的元编程能力。尽管Racket主要应用于教育和研究领域,但其丰富的图形和数学库也使得它可以用于图像处理和简单的图像识别任务。本文将介绍如何使用Racket来进行基础图像处理和识别。Racket的优势Racket的语法简洁灵活,非......
  • FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
    ​Android早期的MediaPlayer控件对于网络视频的兼容性很差,所以后来单独推出了Exoplayer库增强支持网络视频,在《AndroidStudio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细用法。现在Android官方再次升级Exop......
  • 将threejs的官方文档部署到本地,遇到的问题及解决方法
    问题:官方文档浏览速度慢。 1.下载https://threejs.org/官网首页左侧,点击“download”下载  2.得到压缩包:three.js-master.zip解压到本地 3. 部署用VSCode打开解压后的文件夹运行命令:npminstall运行命令:npmrundev  报错:  问了一下AI,得到如何解......
  • Spring Boot知识管理系统:技术与方法论
    2相关技术2.1MYSQL数据库MySQL是一个真正的多用户、多线程SQL数据库服务器。是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常适用于Web站点或者其他......
  • 操作方法分享:4G模组中移OneNET轻松上云平台
    ​一、简介 1.1IoT_CLOUD的功能IoT_CLOUD库本质就是上层设计一套通用的API,用库来实现每个平台功能的对接。目前已经实现了各个平台的所有注册方式,其中自动注册会将相关验证信息保存KV,随后使用此验证信息进行连接,通知针对每个平台添加了特有系统实现,比如:设备上线通知、设备......
  • Air201资产定位模组LuatOS:录音&播放录音功能的操作方法
    ​ 一直有小伙伴们问,迷你小巧的合宙Air201虽然有很多优点,超低功耗、精准定位,那么它是否支持录音、播放录音功能? 那必须能!高集成化设计的Air201自带了ES8311音频解码芯片(AudioCodec)及MIC麦克,可支持本地的录音功能;使用配套喇叭即可将录音保存的数据进行播放,操作极为方便。本......
  • 如何在cnblogs的发文中使用自定义地址作为发文链接
    要知道在cnblogs中发表内容后其默认的链接地址都是一串数字的形式,比如本篇的默认地址:https://www.cnblogs.com/xyz/p/18461898但是为了让发表的内容更有个性化,于是我们可以指定发文内容的链接地址,也就是自定义发文内容的链接地址,具体方法为在发表时指定slug地址,具体如下:如果......
  • 高级java每日一道面试题-2024年10月11日-数据库篇[Redis篇]-Redis都有哪些使用场景?
    如果有遗漏,评论区告诉我进行补充面试官:Redis都有哪些使用场景?我回答:Redis是一个开源的、基于键值对的数据结构存储系统,,它支持多种数据类型,包括字符串、散列、列表、集合和有序集合。它可以用作数据库、缓存和消息中间件。由于其高性能、丰富的数据结构支持以及多种......
  • XSSer简单了解与使用
    XSSer(CrossSiteScriptingExplorer)是一款自动化的XSS漏洞检测和利用工具,可以在Web应用中发现、利用、报告XSS漏洞,包含了多种选项,可以尝试绕过某些过滤器,并使用各种特殊技术进行代码注入,它通过自动化的工作流程帮助安全人员识别潜在的安全风险,并提供详细的报告,以增强网站的安......