【CMake】windows10下入门课程

news2024/11/17 6:49:17

【CMake】windows10下入门课程

提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论


文章目录

  • 【CMake】windows10下入门课程
  • 前言
  • cmake安装
  • 初识cmake:新建helloworld项目
  • cmake的入门使用法则
  • 总结


前言

CMake(Cross-Platform Make)是一个开源的跨平台构建工具,用于管理软件项目的构建过程,它使用简单的配置文件(CMakeLists.txt)来描述项目的构建规则,然后根据这些规则生成适用于不同平台和编译器的构建脚本或项目文件。
CMake的主要作用是提供一个平台无关的构建系统,使开发人员能够轻松地在不同的操作系统和编译器上构建他们的软件项目,因此它为开发人员提供了一种简化和自动化构建过程的方式,同时支持各种主流编程语言,如C、C++、Python等。
CMake的主要功能和优势:

  1. 跨平台:CMake可以生成针对不同操作系统(如Windows、Linux、macOS等)和不同编译器(如GCC、Clang、Visual Studio等)的构建脚本或项目文件,使得开发人员能够在不同的平台上使用相同的CMake配置来构建项目。
  2. 简化的配置:CMake使用一种简单而灵活的配置语言来描述项目的构建规则,通过编写CMakeLists.txt文件,开发人员可以指定源文件、库依赖、编译选项、目标生成等构建相关的信息。
  3. 自动化构建:CMake自动检测项目的源文件和依赖关系,并生成适当的构建规则,能够根据目标平台和编译器的要求自动调整构建过程,包括编译、链接和安装等步骤。
  4. 多种生成选项:CMake支持多种生成选项,包括生成Makefile、IDE项目文件(如Visual Studio、Xcode等)、Ninja构建文件等,开发人员可以根据自己的需求选择最合适的构建系统。
  5. 模块化和扩展性:CMake提供了丰富的模块和功能扩展接口,开发人员能够自定义和扩展构建过程,它支持使用CMake模块来处理特定的构建任务,如查找第三方库、生成文档等。
    CMake是一个强大而灵活的构建工具,它简化了跨平台软件项目的构建过程,通过使用CMake,开发人员可以更高效地管理和构建他们的项目,减少了在不同平台和编译器上进行手动配置和构建的工作量。

cmake安装

在官网地址下载cmke,点击 “Download” 进入下载页面,选择Windows操作系统的cmaker安装,介意选择"cmake-x.xx.x-rc3-windows-x86_64.msi"文件;打开安装包,按照提示安装cmaker到你的电脑中,打开命令行工具,输入 “cmake --version” 命令,如果能看到 cmaker 的版本信息,则表示安装成功。


初识cmake:新建helloworld项目

  1. 创建helloworld.c文件,编写最基础的helloworld代码。

    #include <stdio.h>
    int main(int argc, char **argv)
    {
        printf("hello\n");
        return 0;
    }
    
  2. 创建"CMakeLists.txt"文件,注意,这里的名字不能有任何错误,否则后续编译会失败。

    # 指定cmake的最小版本
    cmake_minimum_required(VERSION 3.5)
    # 指定工程名字
    project(hello_world)
    # 生成可执行文件xxx.exe
    add_executable(hello_world helloworld.c)
    
  3. 开始编译cmake文件,在CMakeLists.txt和helloworld.c的同一目录下新建build文件夹,通常将编译生成的工程是放到CMakeLists.tx和helloworld.ct同一目录下的build文件夹中,防止生成的工程文件与原来的文件混淆在一次。cmd进入build路径下执行命令进行编译。cmake默认使用Visual Studio2019版本。

    # 生成vs工程(windoes下) ..表示在上级目录寻找cnake文件
    cmake ..
    # 开始编译代码,生成可执行程序exe
    cmake --build .
    # 在build\Debug生成exe,可以用cmd执行该文件
    

  4. 用vs2019打开工程,c源码文件和cmake文件都被拷贝到在test目录下,可以在release|64或debug|64下执行test.c,可能需要将text设置为启动项。


cmake的入门使用法则

  1. 显示cmake支持的所有IDE,可以查看cmake在windows10下支持的所有IDE版本,带*号表示默认支持的版本。
    cmake -G
    
  2. 生成指定Visual Studio版本的工程,需要安装对应的Visual Studio的版本。
    # 生成Visual Studio 10 2017版本的工程,编译生成的文件可以在任何地方
    # 默认生成与当前操作系统位数相匹配的项目文件,生成64位
    cmake -G "Visual Studio 15 2017" ..\demo
    # 生成32位,旧版本
    cmake -G "Visual Studio 15 2017 Win32" ..\demo
    # 新版本
    cmake -G "Visual Studio 15 2017 " -A Win32 ..\demo
    # 生成MinGW的项目
    cmake -G "MinGW Makefiles" ..\demo
    
  3. CMake编译选项:Debug构建,CMake会配置用于调试目的的构建,启用调试符号并禁用优化;Release构建,CMake会优化发布版本的构建,启用各种优化标志,提高代码执行速度和减小可执行文件大小;RelWithDebInfo构建,CMake会在生成的可执行文件中同时包含优化和调试信息,是一种混合类型;MinSizeRel构建,CMake会在生成尺寸最小的可执行文件,以应对资源受限的环境或者对可执行文件大小敏感的应用场景。
    # CMAKE_BUILD_TYPE:用于指定编译类型
    # 生成vs工程
    cmake -D CMAKE_CONFIGURATION_TYPES="Release;Debug" ..\demo
    # 编译(Release或Debug)
    cmake --build . --config Release
    cmake --build . --config Debug
    
  4. 生成静态库,新建头文件math.h和源文件math.c,作为被调用的源文件以提供函数。
    ----------------------------------------------------------------------
    // test.c
    #include <stdio.h>
    #include "math.h"
    int main()
    {
        printf(" 5-4=%d\n", sub(5, 4));
        return 0;
    }
    ----------------------------------------------------------------------
    // math.h
    #ifndef MATH_H_
    //用于避免头文件的重复包含
    #define MATH_H_
    int sub(int m, int n);
    #endif // MATH_H_
    ----------------------------------------------------------------------
    // math.c
    #include "math.h"
    int sub(int m, int n)
    {
        return m - n;
    }
    ----------------------------------------------------------------------
    
    # 在CMakeLists.txt加入指令
    # math.c生成静态库
    add_library(math STATIC math.c)
    # 使用静态库
    target_link_libraries(hello_world math)
    
    cmake ..
    cmake --build .
    
    先生成lib库,然后才生成exe。
  5. 生成动态库
    # 在CMakeLists.txt加入指令
    # math.c生成动态库,注意在dll同目录下必须要有lib
    add_library(math SHARED math.c)
    # 链接动态库
    target_link_libraries(hello_world math)
    
    cmake ..
    cmake --build .
    
    链接器无法找到名为 “.lib” 的文件,出现错误。
    将生成的静态库文件,放到dll同一目录下,成功生成动态库。

总结

用简单的实例讲解了cmake最入门的使用,后续会根据博主的学习和使用情况,逐步充实cmake的学习教程,并与大家分享讨论,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1142625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效文件管理:自动生成文件夹及重命名的方法分享

在高效文件管理中&#xff0c;自动生成文件夹及重命名是一项非常实用的技巧。通过掌握这种方法&#xff0c;我们能够更轻松地整理和查找文件&#xff0c;提高工作效率。本文将分享云炫文件管理器自动生成文件夹及重命名的实用方法&#xff0c;帮助您实现高效的文件管理。现在跟…

OSPF NSSA区域配置

NSSA&#xff1a;Not-So-Stubby Area&#xff08;不太末节的区域&#xff09; 示例&#xff0c;拓朴如下&#xff1a; 思路&#xff1a; R1正常配置Area 0区域&#xff0c;R2的1口配置为区域0&#xff0c;2口配置为区域1&#xff0c;配置NSSA&#xff0c;R3配置为区域1…

如何在Windows和Linux系统上监听文件夹的变动?

文章目录 如何在Windows和Linux系统上监听文件夹的变动&#xff1f;读写文件文件系统的操作缓冲和流文件改变事件 如何在Windows和Linux系统上监听文件夹的变动&#xff1f; libuv库实现了监听整个文件夹的修改。本文详细介绍libuv库文件读写和监听的的实现方法。libuv库开发了…

【计算机网络笔记】Cookie技术

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

Linux系统下安全控制策略SELinux解析

SELinux&#xff08;Security-Enhanced linux&#xff09;是增强版Linux&#xff0c;简称SELinux&#xff0c;它是一个Linux内核模块&#xff0c;也是Linux的一个安全子系统&#xff0c;主要以内核模块为支持&#xff0c;用户态程序进行权限策略管理。 背景 Linux系统下的roo…

镍氢充电管理芯片-IC AH2185

镍氢充电管理芯片AH2185&#xff1a;为便携式设备提供高效充电解决方案 随着科技的不断发展&#xff0c;便携式设备在人们的生活中扮演着越来越重要的角色。这些设备包括数码相机、电子词典、智能手机等&#xff0c;它们共同的特点是需要定期充电。为了满足这一需求&#xff0…

FFmpeg5.1.3编译动态库踩坑之旅(基于Linux虚拟机)

准备工作 环境准备 1.Windows安装Oracle VM VirtualBox 7.0.10&#xff0c;安装ubuntu-22.04.3。 坑一&#xff1a;无法往虚拟机里拖放复制文件&#xff0c;解决办法&#xff1a;登录Ubuntu虚拟机时切换到xorg方式登录&#xff0c;参考地址&#xff1a;Ubuntu Desktop 22.04…

LLVM学习笔记(55)

4.1.3. 降级 在前面的章节里&#xff0c;我们展示了目标机器特定节点与目标机器无关节点共存的一个图。你可能会问&#xff0c;如果这是指令选择的一个输入&#xff0c;为什么在SelectionDAG类中已经有一些目标机器特定的节点&#xff1f;要理解这&#xff0c;我们首先在下图概…

Kafka - 3.x 图解Broker总体工作流程

文章目录 Zk中存储的kafka的信息Kafka Broker总体工作流程1. broker启动后向zk中注册2. Controller谁先启动注册&#xff0c;谁说了算3. 由选举出来的Controller监听brokers节点的变化4. Controller决定leader选举5. Controller将节点信息上传到Zk中6. 其他Controller从zk中同步…

numpy和字符串格式化,用*画田字形状

numpy的字符型元素矩阵&#xff0c;可以方便画&#xff1b;直接python字符串手撕&#xff0c;也可以轻巧完成。 (本笔记适合熟悉循环和列表的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《…

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用

文章目录 一、项目介绍二、技术架构三、Gitee仓库地址四、ArkUI-X开发者文档五、快速开始——环境准备1、下载DevEco Studio&#xff0c;版本V4.0 Beta2以上2、打开DevEco&#xff0c;下载相关环境配置3、配置开发环境3.1、OpenHarmony SDK3.2、安装ArkUI-X SDK3.2、Android SD…

科聪协作(复合)移动机器人整体解决方案

协作&#xff08;复合&#xff09;移动机器人&#xff08;AGV/AMR&#xff09;相较传统工业机器人具有更加安全和简单的工作优势&#xff0c;具备较强的发展潜力。协作&#xff08;复合&#xff09;移动机器人安全性和操作的简洁性、灵活性不断提高,优势得到了充分发挥,在越来越…

浏览器事件循环 (event loop)

进程与线程 进程 进程的概念 进程是操作系统中的一个程序或者一个程序的一次执行过程&#xff0c;是一个动态的概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;是操作系统结构的基础。 简单的来说&#xff0c;就是一个程序运行开辟的一块内存空间&a…

Windows-Oracle19c 安装详解-含Navicate远程连接配置 - 同时连接Oracle11g和Oracle19c

文章目录 0 说明1 下载链接2 安装&#xff1a;一定要以管理员身份运行&#xff0c;不然后面有可能会报错。3 启动监听4. 登录Oracle4 Navicate远程连接-配置监听4.1 修改监听文件4.2 网络配置助手-配置本地监听端口4.3 Navicate连接成功 5 Navicate同时连接两个Oracle数据库 0 …

读高性能MySQL(第4版)笔记21_读后总结与感想兼导读

1. 基本信息 高性能MySQL&#xff1a;经过大规模运维验证的策略&#xff08;第4版&#xff09; High Performance MySQL, Fourth Edition [美] Silvia Botros(西尔维亚博特罗斯)&#xff1b;Jeremy Tinley(杰里米廷利) 电子工业出版社,2022年10月出版 1.1. 读薄率 书籍总字…

窗帘布艺经营配送小程序商城的效果如何

窗帘布艺覆盖生活中多个使用场景&#xff0c;可以说是必需品&#xff0c;由于需要客户提供尺寸乃至上门安装等&#xff0c;因此传统客户购买此类产品&#xff0c;一般会选择线下亲自购买&#xff0c;包括质感、论价、挑选等。 但随着互联网电商深入&#xff0c;线上销售和客户…

Java NIO 高并发开发

Java NIO 高并发开发 前言 Java NIO&#xff08;New I/O&#xff09;相比于传统的Java I/O&#xff08;BIO&#xff09;在高并发开发方面具有以下优势&#xff1a; 非阻塞模式&#xff1a;Java NIO使用非阻塞的I/O操作&#xff0c;允许一个线程管理多个通道&#xff08;Channe…

<多线程章节十> 定时器的使用方法以及定时器的模拟实现

文章目录 &#x1f490;专栏导读&#x1f4a1;Java标准库中的定时器类&#x1f4a1;模拟实现定时器 &#x1f490;专栏导读 本篇文章收录于多线程&#xff0c;也欢迎翻阅博主的其他文章&#xff0c;可能也会让你有不一样的收获&#x1f604; &#x1f342;JavaSE&#x1f337;多…

Studio One6.5新版本功能介绍及下载图文教程

studio one6更新了。studio one终于迎来了期待已久的6.5版本&#xff0c;增加了杜比全景声环绕声等混音模式&#xff0c;让我们混音更加方便&#xff01;Studio One 6破是一个功能完整的工作站&#xff0c;不止于专业的音乐制作和编辑&#xff0c;Studio One也是一个直播表演工…

计算机视觉 激光雷达结合无监督学习进行物体检测的工作原理

一、简述 激光雷达是目前正在改变世界的传感器。它集成在自动驾驶汽车、自主无人机、机器人、卫星、火箭等中。该传感器使用激光束了解世界,并测量激光击中目标返回所需的时间,输出是点云信息,利用这些信息,我们可以从3D点云中查找障碍物。 从自动驾驶汽车的角度看激光雷达…