【CMake】windows10下入门课程

【CMake】windows10下入门课程

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



前言

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的学习教程,并与大家分享讨论,共同进步。

猜你喜欢

转载自blog.csdn.net/yangyu0515/article/details/134050955