• 【Linux 06】项目自动化构建工具 make / makefile


    🌈 Ⅰ make / makefile 介绍

    1. 什么是 make / makefile

    • make:是一个构建 C / C++ 项目的工具 / 命令
    • makefile:是一个包含编译命令与源代码处于同一目录的的脚本文件

    2. 为何存在 make / makefile

    • 当一个工程下有很多个源文件需要使用 g++ 进行编译时,编写 g++ 命令就显得比较复杂。
    • 因此就引入了 make / makefile 实现 自动化编译,只需 make 一下整个工程就自动编译。

    🌈 Ⅱ makefile 文件规则

    1. makefile 创建

    • makefile 本质是一个脚本文件,需要自行创建并编写。

    在这里插入图片描述

    2. makefile 格式

    1. 编写 makefile 格式

    目标:依赖
    [tab键]命令
    
    • 1
    • 2
    • 目标:make 要调用的目标是什么。
    • 依赖:执行对应的命令需要依赖于什么,依赖可以为空。
    • 命令:对应目标需要执行什么操作
      • 注意:命令前必须有一个 tab 键;可以有多个命令,但是必须每个命令独占一行。

    2. 调用 makefile 格式

    命令行输入下列指令即可

    • make:直接调用 makefile 文件中的第一个目标。
    • make + 目标名称:调用 makefile 文件中的其余目标。

    3. makefile 示例

    • 当前有一个 test.cpp 文件。

    在这里插入图片描述

    1. 编写 makefile 文件

    在这里插入图片描述

    • 在当前 makefile 文件中,目标是 666,依赖是 test.cpp 文件,命令是 g++ -o test.exe test.cpp。
    • 意思是 g++ -o test.exe test.cpp 命令依赖于 test.cpp 文件才能执行,目标 666 就是为了调用该命令去生成可执行程序 test.exe。
    • 目标可以是任意名字,但为了方便阅读,建议尽量使目标名和编译产生的可执行程序名一致

    在这里插入图片描述

    2. 调用 makefile 文件

    • 直接在命令行输入 make 即可 (不带目标默认执行第一个目标),会在当前目录寻找 makefile 文件,然后调用目标所对应的指令。

    在这里插入图片描述

    🌈 Ⅲ 使用 .PHONY 强制执行目标

    1. 格式

    .PHONY:目标
    目标:[依赖]
    	命令
    
    • 1
    • 2
    • 3

    2. 概念

    • 在 makefile 中的某些目标是要满足条件才能被调用的,如上述例子中的 test.exe 目标,如果 test.cpp 文件未被修改,则该目标就只能被调用一次。

    在这里插入图片描述

    • 可以用 .PHONY 修饰目标,被 .PHONY 修饰的目标总能被执行

    3. 示例

    • 现在要为 makefile 文件添加一个清理生成的目标文件的功能 clean。
    • 在 makefile 文件里多加一个目标 (起名叫 clean),作用就是清理 test.exe 文件。

    在这里插入图片描述

    • 直接在命令行输入 make clean ,就能清理掉产生的 test.exe 文件了,且 clean 总能被执行。

    在这里插入图片描述

    🌈 Ⅳ makefile 文件万能化

    概念引入

    • 在实际开发中,makefile 文件是不会像下面这么写的。
    • 如果要更换编译的文件,那么 makefile 中要修改的内容就太多了。

    在这里插入图片描述

    1. 用符号表示目标和依赖

    • makefile 中可用一些特殊的符号表示依赖文件和目标文件。
    • 改变这些特殊符号变量的值就可以随意更改要编译和生成的可执行程序文件了。
    变量说明
    @表示目标,会用 @ 替换成对应的目标
    ^表示所有的依赖,会用 ^ 替换成对应的依赖

    在 makefile 中取出变量的内容

    • 在 makefile 中,可以使用 $ 来取出对应变量内存储的值
      • 如: $@,$^,就是取出这两个特殊变量内的值。

    示例

    在这里插入图片描述
    在这里插入图片描述

    2. makefile 支持定义变量

    • 既然已经使用 @ 和 ^ 符号在命令行中表示了目标和依赖。
    • 在 makefile 文件中,敲出来的 test.cpp 和 test.exe 本质上都是字符串。
    • 是字符串就能使用变量存储,之后就可以使用变量来代替实际的目标和依赖文件了。

    示例

    在这里插入图片描述

    在这里插入图片描述

    • 之后要更换编译的文件和可执行程序,直接将 code.cpp 和 code.exe 替换即可。
  • 相关阅读:
    删除链表中的重复元素
    一文带您快速了解工业交换机
    高数总结(6
    基于vue的tiptap编辑器插件(三)
    一阶&二阶数字滤波器笔记
    Jquery 如何获取子元素。如何找到所有 HTML select 标签的选中项。jQuery 里的 ID 选择器和 class 选择器有何不同
    解决el-checkbox点击文字也会选中
    【QT】Qt调用OCX控件详解
    数据结构与算法(Java版) | 几个经典的算法面试题(上)
    人先自辱,而后人辱之
  • 原文地址:https://blog.csdn.net/shangguanxiu/article/details/136130638