• 用CMake编译项目 & CMake和g++的区别


    0.同样是编译c++文件有了g++为什么又出了个CMake

    g++适用于要编译的文件较少的情况。
    而CMake像是写好的脚本,可以一键编译很多c++文件。
    
    • 1
    • 2

    一.创建项目和CMakeLists.txt文件

    1.1 创建一个项目,目录结构如下

    在这里插入图片描述

    1.2 在项目的根目录下创建一个CMakeLists.txt文件用来编译

    CMakeLists.txt的内容如下:

    # 1.指定cmake的版本要求
    cmake_minimum_required(VERSION 3.0)
    
    # 2.指定项目名称,一般用大写
    project(HELLOWORLD)
    
    # 3.编译helloworld.cpp文件生成可执行文件 
    # 3.1 helloWorld_cmake是名字 helloworld.cpp是要编译的文件,两者用空格隔开
    # 3.2 下面这句命令相当于 g++ helloworld.cpp -o helloworld
    add_executable(helloWorld_cmake helloworld.cpp)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    指定cmake的版本要求时,可以打开终端查看cmake版本

    cmake --version
    
    • 1

    二.用CMake内部构建的方法构建项目(不推荐)

    2.1 生成cmake文件
    打开终端进入该项目的目录下,输入如下命令,表示编译当前目录下的项目

    cmake .
    
    • 1

    在这里插入图片描述在这里插入图片描述上面的信息表示:检测c++语言编译器,生成配置信息。最后告诉你生成的文件放到了哪。
    运行命令之后生成了许多cmake相关的文件如下:
    在这里插入图片描述

    2.2 编译项目并生成可执行文件

    命令行直接输入

    make
    
    • 1

    在这里插入图片描述

    第一行表示正在构建cpp.o文件
    第二行表示链接 helloWorld_camke可执行文件
    
    • 1
    • 2

    最终生成了 hellWorld_cmake可执行文件
    在这里插入图片描述

    2.3 运行生成的可执行文件

    ./helloWorld_cmake
    
    • 1

    二.外部构建(推荐)

    2.1 对简单文件构建

    1. 文件目录
    在这里插入图片描述

    2. 首先在项目的根目录下创建一个CMakeLists.txt文件用来编译

    CMakeLists.txt的内容如下:

    # 1.指定cmake的版本要求
    cmake_minimum_required(VERSION 3.0)
    
    # 2.指定项目名称,一般用大写
    project(HELLOWORLD)
    
    # 3.编译helloworld.cpp文件生成可执行文件 
    # 3.1 helloWorld_cmake是名字 helloworld.cpp是要编译的文件,两者用空格隔开
    # 3.2 下面这句命令相当于 g++ helloworld.cpp -o helloworld
    add_executable(helloWorld_cmake helloworld.cpp)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    指定cmake的版本要求时,可以打开终端查看cmake版本

    cmake --version
    
    • 1

    内部构建的方法会生成很多冗余文件,而外部构建是将输出文件与源文件放到不同目录中。

    3. 核心构建代码

    # 进入当前项目目录,创建build文件夹
    mkdir build
    
    • 1
    • 2
    cd build
    
    • 1
    # 对把上上级的目录进行构建,生成cmake文件
    cmake ..
    
    • 1
    • 2
    # 执行make命令对cpp文件进行编译并生成可执行文件
    make
    
    • 1
    • 2

    最终项目目录如下:

    在这里插入图片描述

    2.2 对多文件夹,多文件构建

    项目目录为:
    在这里插入图片描述在根目录创建 CMakeLists.txt,内容如下

    cmake_minimum_required(VERSION 3.0)
    
    project(SWAP)
    
    # 把include文件夹包含在头文件搜索路径中
    # 对应中的g++ main.cpp src/swap.cpp -Iinclude -o main中的 -Iinclude
    include_directories(include)
    
    # 指定输出文件名:main_cmake,后面是要编译的文件
    add_executable(main_cmake main.cpp src/swap.cpp)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    创建build文件夹并生成CMake相关的文件

    mkdir build
    cd build
    cmake ..
    
    • 1
    • 2
    • 3

    使用make命令,编译文件并生成可执行文件

    make
    
    • 1

    在这里插入图片描述

    执行生成的可执行文件

    ./main_cmake
    
    • 1

    在这里插入图片描述

    注意

    项目名必须用英文,否则输入make命令没有反应

  • 相关阅读:
    LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
    【C++杂货铺】一文带你走进RBTree
    vue项目分环境部署
    Leetcode162. 寻找峰值
    pat考完了
    什么是RPA机器人流程自动化软件?
    基于 MQ 的分布式 Serverless 多租任务处理系统架构演进
    “萝卜快跑”仍然存在出现多处高危网络安全问题
    泛微OA E-Office V10 OfficeServer 任意文件上传漏洞复现
    计算机毕业设计之java+springboot基于vue的会员制医疗预约服务管理信息系统
  • 原文地址:https://blog.csdn.net/qq_42864343/article/details/134273379