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

相关文章

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

ubuntu20.0.4系统中安装Anaconda的超详细图文教程

《ubuntu20.0.4系统中安装Anaconda的超详细图文教程》:本文主要介绍了在Ubuntu系统中如何下载和安装Anaconda,提供了两种方法,详细内容请阅读本文,希望能对你有所帮助... 本文介绍了在Ubuntu系统中如何下载和安装Anaconda。提供了两种方法,包括通过网页手动下载和使用wg

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚