码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Makefile


    目录

    一、Makefile作用

    二、目标、依赖、命令

    三、通配符%,*,?,[]

    四、定义和使用变量

    五、伪目标(.PHONY)

    六、引用其他Makefile(include指令)

    七、@用来静默执行

    八、Makefile中几种变量赋值运算符

    九、Makefile的环境变量

    十 、Makefile的自动变量


    一、Makefile作用

    多个文件,方便编译链接过程。

    二、目标、依赖、命令

    • 目标就是最终要生成的东西
    • 依赖是用来生成目录的原材料
    • 命令就是加工方法
    • make的过程其实就是使用命令将依赖加工成目标的过程

    三、通配符%,*,?,[]

    自动推导:就是Makefile的规则,当Makefile需要某一个目标时,他会把这个目标去套规则说明,一旦套上了某个规则说明,则Makefile会试图寻找这个规则中的依赖,如果能找到则会执行这个规则用依赖生成目标。

    • %一般只用于规则描述中,又叫做规则通配符
    • *  若干个任意字符
    • ? 1个任意字符
    • [] 将[]中的字符依次去和外面的结合匹配

    四、定义和使用变量

    定义和使用变量,和shell一样都没有变量类型,直接定义使用,引用变量时用$(var)

    五、伪目标(.PHONY)

    • 伪目标就是,单纯为了执行这个目标下面的命令,不会生成目标文件
    • 伪目标一般都没有依赖,因为执行伪目标就是为了执行目标下面的命令
    • 伪目标可以直接写,不影响使用,也可以在前面用.PHONY来明确声明它是伪目标。

    .PHONY clean

    clean:

            rm *.o -f

    六、引用其他Makefile(include指令)

    有时候Makefile总体比较复杂,因此分成好几个Makefile来写。然后在主Makefile中引用其他的,用include指令来引用。引用的效果也是原地展开,和C语言中的头文件包含相似。

    七、@用来静默执行

    • 在makefile的命令行中前面的@表示静默执行。
    • 默认情况下在执行一行命令前,会先把这行命令给打印出来,然后再执行这行命令。
    • 静默执行:不打印命令,直接执行这行命令

    八、Makefile中几种变量赋值运算符

    • =  直接赋值,被解析时他的值取决于最后一次赋值时的值
    • := 也是直接赋值,就地直接解析,只用往前看即可

    不加:把全局最后赋值后的变量解析
    加:就地解析

    1. va=abc
    2. vb=$(va)gef
    3. va=qq
    4. all:
    5. @echo $(vb)
    6. #把下面的qq解析赋值
    7. xw@ubuntu:~/xiaowei/makefilexuexi$ make
    8. qqgef
    9. va=abc
    10. vb:=$(va)gef
    11. va=qq
    12. all:
    13. @echo $(vb)
    14. #abc解析赋值
    15. xw@ubuntu:~/xiaowei/makefilexuexi$ make
    16. abcgef
    • ?= 赋值过则执行这条赋值,如果前面已经赋值过了则本行被忽略
    • += 用来给一个已经赋值的变量接续赋值,意思就是把这次的值加到原来的值的后面
      中间自动加空格

    九、Makefile的环境变量

    • export导出的就是环境变量。一般情况下要求环境变量名用大写,普通变量名用小写。
    • 就是Makefile之间可以共享全局变量
    • Makefile中可能有一些环境变量可能是makefile本身自己定义的内部的环境变量或者是当前的执行环境提供的环境变量(譬如我们在make执行时给makefile传参。make CC=arm-linux-gcc,其实就是给当前Makefile传了一个环境变量CC,值是arm-linux-gcc。我们在make时给makefile传的环境变量值优先级最高的,可以覆盖makefile中的赋值)

    十 、Makefile的自动变量

    • $@   规则的目标文件名
      $<     规则的依赖文件名
      $^     依赖的文件集合
  • 相关阅读:
    构建空间场景轻应用,Mapmost Alpha来啦【文末赠书(10本)--第一期】
    前端验证弱密码代码记录
    [LeetCode周赛复盘] 第 320 场周赛20221120
    一个注解搞定SpringBoot接口定制属性加解密
    力扣刷题 day53:10-23
    封装JDBCUtil工具
    【23真题】科目代号每年一改?换汤不换药!
    HTML网页设计:爱护动物题材——保护动物大象(6页) HTML网页设计结课作业 web课程设计网页规划与设计 网页设计成品DW静态网页
    算法与数据结构-堆
    Unity3d+Gameframework:entity实体代码分析,基于StarForce
  • 原文地址:https://blog.csdn.net/m0_51247005/article/details/126892048
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号