Cmake教程之一(入门Cmake基础命令)

2024-08-30 02:52

本文主要是介绍Cmake教程之一(入门Cmake基础命令),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CMake 教程 - 一、快速上手

注:此教程需要了解编译常识和C/C++语法,旨在入门cmake,配置环境工作不在教程范围内

介绍

这一步介绍了CMake的基本语法、命令和变量,完成一个简单的CMake项目。

练习 1: 构建一个基本项目

在一个目录下新建Step1目录
在该新建目录中新建tutorial.cxx(其实就是c++文件)
复制粘贴下面的内容:

// tutorial.cxx#include <cmath>
#include <iostream>
#include <string>
#include "TutorialConfig.h"
// 定义版本信息
#define Tutorial_VERSION_MAJOR 1
#define Tutorial_VERSION_MINOR 0int main(int argc, char *argv[])
{if (argc < 2){// report versionstd::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."<< Tutorial_VERSION_MINOR << std::endl;std::cout << "Usage: " << argv[0] << " number" << std::endl;return 1;}// 将输入字符串转换为doubleconst double inputValue = std::stod(argv[1]);// 计算平方根const double outputValue = std::sqrt(inputValue);// 输出结果std::cout << "The square root of " << inputValue << " is " << outputValue << std::endl;return 0;
}

最基本的CMake项目是从一个单一的源文件构建一个可执行文件,做到这样至少需要三个CMake命令:

步骤

  1. 指定CMake版本,确保cmake兼容性
    cmake_minimum_required(VERSION 3.10)
    
  2. 设置项目名称,有一些变量会与项目名称挂钩
    project(Tutorial)
    
  3. 添加可执行文件,最起码输出的可执行文件得知道是啥
    add_executable(Tutorial tutorial.cxx)
    

构建和运行

  • 创建构建目录(新建文件夹:
    mkdir Step1_build
    
  • 进入构建目录并配置项目(让cmake根据CMakeLists自动生成编译的步骤和实现:
    cd Step1_build
    cmake ../Step1
    
  • 构建项目,根据cmake生成的编译步骤编译:
    cmake --build .
    
  • 运行可执行文件:
    ./Tutorial 10
    

由上可以看出,cmake的作用是隔离平台的不同,通过一个CMakeLists生成在不同的平台的编译过程并可以通过cmake命令执行

练习 2: 指定C++标准

在这个练习中,学习如何指定一个特定的C++标准,如C++11。

步骤

  1. tutorial.cxx 中用 std::stod 替换 atof
    const double inputValue = std::stod(argv[1]);
    
  2. 移除不必要的 #include 指令
    // 移除: #include <cstdlib>
    
  3. CMakeLists.txt 中指定C++11标准
    set(CMAKE_CXX_STANDARD 11)
    set(CMAKE_CXX_STANDARD_REQUIRED True)
    

构建和运行

  • 重新进入构建目录并构建项目:
    cd Step1_build
    cmake --build .
    
  • 运行可执行文件:
    ./Tutorial 10
    

练习 3: 添加版本号和配置头文件

有时我们希望在源代码中使用在 CMakeLists.txt 中定义的变量。在这个练习中,我们将添加一个项目的版本号并打印出来。

步骤

  1. CMakeLists.txt 中定义项目版本号
    project(Tutorial VERSION 1.0)
    
  2. 使用 configure_file 命令创建配置文件
    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/TutorialConfig.h.in""${CMAKE_CURRENT_BINARY_DIR}/TutorialConfig.h"
    )
    官方CMake教程对configure_file的解释是:复制一份输入文件到输出文件,替换输入文件中被@VAR@或者${VAR}引用的变量值。也就是说,让普通文件,也能使用CMake中的变量。
    
  3. CMakeLists.txt 中指定包含路径
    target_include_directories(Tutorial PUBLIC"${CMAKE_CURRENT_BINARY_DIR}")
    # 通过打印头文件信息,可以看到包含目录的添加结果
    get_target_property(INCLUDE_DIRS Tutorial INCLUDE_DIRECTORIES)
    message(STATUS "Include directories for Tutorial: ${INCLUDE_DIRS}")
    
  4. tutorial.cxx 中包含配置头文件
    #include "TutorialConfig.h"
    
  5. 打印版本号
    # 可以读取到构建目录下头文件中替换后的变量值
    std::cout << "Tutorial Version " << Tutorial_VERSION_MAJOR << "."<< Tutorial_VERSION_MINOR << std::endl;
    

构建和运行

  • 重新构建项目并运行:
    cd Step1_build
    cmake --build .
    ./Tutorial
    

此时可以看到程序输出项目的版本号。

这篇关于Cmake教程之一(入门Cmake基础命令)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1119594

相关文章

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.