首页 > 其他分享 >makefile

makefile

时间:2024-02-27 15:55:37浏览次数:16  
标签:文件 依赖 OBJ makefile 生成 赋值

makefile的三要素:

  目标:要生成的目标文件

  依赖:目标文件由哪些文件生成

  命令:通过执行命令由依赖文件生成目标

规则:

  目标:依赖

  <Tab> 命令

 

执行make指令,默认是生成第一个目标

原理 :

  1. 当依赖文件不存在,如果有的依赖文件不存在,则向下搜索规则,看是否有生成该依赖文件的规则,

      如果有规则用来生成该依赖文件,则执行规则中的命令生成依赖文件;如果没有规则用来生成该依赖文件,则报错。

  2. 当依赖文件存在,如果所有的依赖文件都存在,则检查规则中依赖文件是否比目标新,如果任一依赖文件都比目标文件新,则目标必须更新。

 

变量:

  1. 普通变量:用户自定义的变量,要见名知义

    makefile中变量一般有三种赋值,“=”赋值表示变量的值是整个makefile中最后被指定的值。

    OBJ_A = A

    OBJ_B = $(OBJ_A) B

    OBJ_A = AA

    all:

      @echo $(OBJ_B)//输出AA B,不是A B,在执行make指令时,会把整个makefile展开,来决定变量的值

 

    “:=”表示直接赋值,赋予当前位置的值

    OBJ_A := A

    OBJ_B := $(OBJ_A) B

    OBJ_A := AA

    all:

      @echo $(OBJ_B)//输出A B,即根据当前位置进行赋值,“:=”才是真正意义上的直接赋值

 

    “?=”表示如果该变量没有被赋值,赋予等号后面的值

     VAR := B

     VAR ?= A

     all:

      @echo $(VAR)//输出B   

  2.

 

标签:文件,依赖,OBJ,makefile,生成,赋值
From: https://www.cnblogs.com/zj-studyrecoding/p/18037029

相关文章

  • makefile 实例: 编译libxyz.so 和 abc可执行文件。
    .PHONY:cleanallalldepall:alldepOBJDIR=Object###libxyx.so###TARGET_LIB_XYZ=libxyz.soTARGET_LIB_XYZ_OUTPUT=$(OBJDIR)/$(TARGET_LIB_XYZ)LDFLAGS+=-ltelux_wlan-lnl-3-lnl-genl-3LDFLAGS+=-L$(SDKTARGETSYSROOT)/lib-L.-rdynamicCFLAGS+=-I$(S......
  • Makefile 特殊符号
     一.@符号:    在规则运行中,表示不显示命令行本身,只显示它的结果二.自动变量:$@,$^,$<,$?,$+,$%,$*   $@:表示目标文件,或规则中的目标文件集;在模式规则中,如果有多个目标,那么,$@就是匹配于目标中模式定义的集合。  $^:表示所有的依赖文件  $<:表示第一......
  • 使用 Makefile 进行项目管理和构建
    使用Makefile进行项目管理和构建来源  https://zhuanlan.zhihu.com/p/661285050 什么是Makefile?Makefile可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译......
  • CMake构建Makefile解析
    CMake构建Makefile解析来源 https://zhuanlan.zhihu.com/p/661284197 一、CMake构建后的项目结构解析(AnalysisoftheProjectStructureAfterCMakeBuild)1.1CMake构建后的目录结构(DirectoryStructureAfterCMakeBuild)CMake构建完成后,会在项目的根目录下生成一个名为......
  • 【csh】makefile实例
    makefile实例:if(-e$1)thenforeachcell(`awk'{print}'$1`)make-f./makefileCELLNAME=$cell$argv[2-]endelsemake-f./makefileCELLNAME=$1$argv[2-]endif 重点是makefile文件可以串行提升效率: LAY_LIB="AA"SCH_LIB="BB&quo......
  • Makefile in Linux
    WhyIneedthisfile?IFIDON'TUSESOMETHING,IWILLFORGETTHEM.ThankstoGithub&GNUmakeIntroduction(compileprocess,GNU_GCCcommands)C/C++compileDetailsPatternrule#Defineapatternrulethatcompilesevery.cfileintoa.o......
  • shell脚本和makefile的异同
    一直有这个疑惑,今天特地查了查,粘在这里。这是别人,要是以后自己发现了别的不同,在继续写。还有,最后两条还不是很明白,可能没用过吧,在Makefile可以调用shell脚本,但是Makefile和shell脚本是不同的。本文试着归纳一下Makefile和shell脚本的不同。1、shell中所有引用以$打头的变量其后......
  • makefile学习--------1
    为什么要使用makefile:这是在linux下编译一个c语言文件时需要的指令,如果需要编译的文件不在同一个路径时,还需要将路径写上,十分麻烦,而且要是修改之后想重新编译,就需要再一次输入这些繁琐的指令。为了避免这种情况,采用了makefile,makefile里可以放这些执行指令,只需要使用的时候mak......
  • makefile使用摘要
    问题1:多个源文件参与的编译过程中,全部重新编译不合理;gcc-c*.c问题2:在手动处理过程中,由于一个基础文件的更改,导致后续的编译过程非常容易出错。解决方法:编写makefile文件$(sources:.c=.d)是一个变量替换语法,把sources变量中每一项的.c替换成.d特殊变量:$^表示规则中的......
  • linux内核-2.Linux 内核makefile编译过程
    1zImage编译_all是默认目标,如果使用命令make或者makeall编译Linux的话此目标就会被匹配。KBUILD_EXTMOD为空的,因此194行的代码成立,因此_all依赖all。all又依赖vmlinux,开始编译vmlinux。makeARCH=armCROSS_COMPILE=arm-linux-gnueabihf-distcleanmakeARCH=armCR......