当前位置: 首页 > news >正文

【Linux】Makefile Cmake—基操

Makefile & Cmake—基操

  • Makefile:
      • Makefile背景
      • 基操
      • 自动变量:进一步简化规则
      • Makefile工作原理:
  • Cmake:
      • Cmake背景:
      • 基操
    • 二者区别:
    • 二者相同点:

Makefile:

Makefile背景

在 Linux 环境下,Makefile 是用于自动化编译程序的脚本文件,它定义了源代码与目标文件之间的依赖关系,以及生成目标文件的编译规则。make是一条命令,makefile是一个文件。

基操

目标: 依赖命令1命令2...

目标(target):要生成的文件。
依赖(prerequisites):生成目标所需要的文件
命令(commands):生成目标的具体操作(如 gcc 编译命令),必须以 Tab 键开头(不能用空格,这是常见错误)
why?
(1)语法解析的历史约定,一行中以 Tab 开头的内容被视为编译命令

(2)“目标:依赖” 行(如 app: main.o)和 “命令行”(如 gcc main.o -o app)需要严格区分:
a.目标 / 依赖行以非空白字符开头(通常是目标名称);
b.命令行必须以 Tab 开头,以此告诉 Make 工具:“这是需要执行的命令”。

依赖关系:
mycode: main.cc
mycode依赖main.cc

mycode为.exe

依赖方法:
g++ main.cc -o mycode
在这里插入图片描述
在这里插入图片描述

自动变量:进一步简化规则

$@:指代当前规则的 “目标”;
$^:指代当前规则的 “所有依赖”

无需多言:
在这里插入图片描述
未使用 .PHONY 修饰
在这里插入图片描述
用 .PHONY 修饰,伪目标的特性是,总是被执行的。
在这里插入图片描述

Makefile工作原理:

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),在下面的例子中,他会找到“hello”这个文件,并把这个文件作为最终的目标文件
  3. 当前目录无 .o 一直往下找,找到 .c 当前目录下有,在一步步向上执行生成hello.exe
    在这里插入图片描述

Cmake:

Cmake背景:

CMake 是一个跨平台的、开源的构建自动化工具,用于管理软件编译过程,通过编写简单的配置文件(CMakeLists.txt),可以生成不同平台的构建文件(如 Makefile、Visual Studio 项目文件等)

基操

  1. 在myproject目录下:
    (1)mkdir build(build目录用来存放cmake后生成的一系列文件)
    (2)vim CMakeLists.txt并编写如下代码
    (3)写好的main.cpp 在这里插入图片描述

CMakeLists.txt并编写如下代码:

在这里插入图片描述

  1. 如下图所示完成  -> mycode.exe
    

在这里插入图片描述

二者区别:

CMake 是一个用于生成构建文件(如 Makefile)的工具,侧重于项目的配置和跨平台构建管理;
而 Makefile 是具体指导构建过程的脚本文件,直接与构建工具(make)配合使用来完成项目的编译和链接。

二者相同点:

目的相同:都是帮助开发者构建软件项目,将源代码文件编译、链接成可执行文件或库文件,从而实现从代码到可用程序的转化。

http://www.dtcms.com/a/313395.html

相关文章:

  • [特殊字符]字节Get!免费进楼攻略速存[特殊字符]
  • LWIP从FreeRTOS到uC/OS-III的适配性改动
  • linux 扩展未分配的磁盘空间到home下
  • SQL157 更新记录(一)
  • 代码随想录算法训练营第五十八天|动态规划part8
  • 成功解决ImportError: DLL load failed while importing _multiarray_umath: 找不到指定的模块。
  • 深度学习中的模型知识蒸馏
  • 深度学习中卷积与互相关
  • 记录使用ruoyi-flowable开发部署中出现的问题以及解决方法
  • FastAPI-Vue3-Admin 一款Python 全栈融合的高可用中后台快速开发平台方案
  • golang 函数选项模式
  • 数据结构(概念及链表)
  • 【数据结构】队列的顺序存储与链式存储(C语言版)
  • 基于深度学习的医学图像分析:使用变分自编码器(VAE)实现医学图像生成
  • (FD Conv)Frequency Dynamic Convolution for Dense Image Prediction论文精读(逐段解析)
  • 07.config 命令实现动态修改配置和慢查询
  • [硬件电路-138]:模拟电路 - 什么是正电源?什么是负电源?集成运放为什么有VCC+和VCC-
  • Unix 发展史概览
  • 探索 Zephyr 项目:高效、可扩展的实时操作系统
  • 源代码本地安装funasr
  • C语言数据结构(6)贪吃蛇项目1.贪吃蛇项目介绍
  • 有限元方法中的数值技术:三角矩阵求解
  • Vulnhub Corrosion2靶机复现
  • 机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)
  • 腾讯云CentOS7镜像配置指南
  • Pytorch实现一个简单的贝叶斯卷积神经网络模型
  • Java 中也存在类似的“直接引用”“浅拷贝”和“深拷贝”
  • [创业之路-530]:创业公司五维架构设计:借鉴国家治理智慧,打造敏捷型组织生态
  • mysql8.0集群技术
  • 第13章 文件输入/输出