首页 > 其他分享 >makefile

makefile

时间:2023-10-24 16:33:40浏览次数:32  
标签:文件 变量 pattern make makefile 延时 text

Makefile规则

生成目标:make [目标],如果make后面没有跟目标,那就生成makefile中第一个规则的第一个目标(即test);也可以make指定的目标,如make clean

 

命令被执行的 2 个条件: 1. 依赖文件比目标文件新

  1. 没有目标文件。

为什么要伪目标?

因为在执行像make clean这样的指令时,由于他没有依赖,如果在该目录下有一个clean文件或目录,那么rm *.o test命令就无法执行,因为不满足命令被执行的第一个条件。

 

有a.c 、b.c、 c.c三个文件

Test: a.o b.o c.o

gcc -o test $^($^  表示所有的依赖文件)

%.o : %.c

Gcc -c -o $@ @<($@:表示目标; $<:表示依赖中的第一个文件)

clean:

Rm *.o test

.PHONY:clean (伪目标)

 

目标:依赖(一个或多个依赖文件)

[TAB]命令

 

通配符:

$@ 表示目标

$<  表示依赖的第一个文件

$^  表示所有的依赖文件

 

变量:

:=  #及时变量 如A = XX;A的值即刻确定,在定义时即确定

=   #延时变量 如B :=xx; B的值在使用时才确定

?=  #延时变量,如果第一次定义才起效,如果在前面该变量已定义则忽略这句

+=  #附加,他是及时变量还是延时变量取决于前面的定义

A : = $(C) #A是即使变量,所以在定义时即可确定,但是C还没有定义,所以A为空

B = $(C)#B是延时变量,在使用时才确定,所以下面输出B=ABC123

C = ABC#在定义时C为延时变量

D = 100ASK

D ?=ZJ#这条语句被忽略

 

all:

echo A = $(A)#这里输出A =

echo B= $(B)

echo D= $(D)

 

C +=123#附加时,这个就是延时变量,所以在使用时才确定,所以$(C)为ABC123

函数($是引用或调用函数):

$(foraech var,list,text)#调用foreach函数,对 list 中的每一个元素,取出来赋给 var,然后把 var改为text所描述 的形式

 

$(filter pattern...,text)#调用foreach函数,在text中取出符合pattern格式的值

$(filter-out pattern...,text)在text中取出不符合pattern格式的值

$(wildcard pattern)pattern定义文件名的格式,wildcard取出当前目录存在的pattern格式文件

$(patsubst pattern,replacement,$(var))替换

 

在test下,建立a.c和b.c2个文件,在sub目录下,建立sa.c和sb.c2 个文件

建立一个简单的Makefile
src=$(wildcard .c ./sub/.c)  #输出a.c b.c ./sub/sa.c ./sub/sb.c2
dir=$(notdir $(src)) #输出a.c b.c sa.c sb.c  notdir : 去除路径
obj=$(patsubst %.c,%.o,$(dir) )#输出a.o b.o sa.o sb.o

标签:文件,变量,pattern,make,makefile,延时,text
From: https://www.cnblogs.com/zj-studyrecoding/p/17785148.html

相关文章

  • Makefile基础使用和实战详解
    一、基础Makefile其实只是一个指示make程序如何为我们工作的命令文件,我们说Makefile其实是在说make。而对于项目来说,Makefile是指软件项目的编译环境。Makefile的好坏对于项目开发有些什么影响呢?设计得好的Makefile,当我们重新编译时,只需编译那些上次编译成功后修改过的......
  • Makefile语法详细总结及示例解析(快速掌握)
     文章目录一、简介二、常用规则介绍2.1递归扩展变量2.2常见的自动化变量解析2.3常用的编译器宏定义2.4条件语法2.5其他特殊变量(1)VPATH变量(2).PHONY变量(3)include变量(4)$(Q)变量2.6Makefile实例2.7添加打印信息2.8实例解析2.9objs的用法三、......
  • Makefile快速入门
    编译概述编译基础:使用GCC编译程序时可以分为4个阶段:(1)预处理(pre-processing)-E.c---->.i-I(Include)将源文件生成中间文件(2)编译(compiling)-S.i---->.s 将中间文件生成汇编(3)汇编(Assembling)-c.s--->.o 将汇编转换成机器代码(4)链接(Linking) .o--->可执行文件......
  • Makefile基础入门
    第1章Makefile快速入门基础概念make:项目构建工具——用于管理文件的更新Makefile:规则文件,告诉make如何进行编译与管理Makefile(取名makefile也行)其实就是一个脚本文件。快速入门创建文本文档——文件名Makefile#代表注释显示规则:一条显示规则由以下构成 1......
  • makefile学习记录 :一个工程里有多个makefile 如何make根目录下的makefile 调用子目录
    注:本文个人学习记录目的:一个工程里有多个makefile如何make根目录下的makefile调用子目录下的makefile,编译所有.c文件如图所示目录结构,根目录server:makefile;子目录so:makefile  根目录makefile:GCC=gccAPP=server ALL_C=$(wildcard./*.c)C_OBJ=$(notdir$......
  • Makefile详解—clean
    每个Makefile中都应该写一个清空目标文件(.o和执行文件)的规则,这不仅便于重编译,也很利于保持文件的清洁。这是一个“修养”。一般的风格都是: clean:rmedit$(objects) 更为稳健的做法是: .PHONY:cleanclean:-rmedit$(objects) 前面说过,.PHONY意思表示clean是一......
  • Makefile knowledge summarization
    WildcardThewildcardinmakefileissimilarwithmacroinC/C++,itisn'tsimilarwithwildcardinlinuxshell,soitdoesn'texpendautomatically.object1=*.c//*.cobject2=$(wildcard*.cpp)//main.cppt1.cppt2.cppAutomaticallygene......
  • makefile中.PHNOY的用法
    makefile中PHONY的重要性     伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签。伪目标通过  PHONY来指明。   PHONY定义伪目标的命令一定会被执行,下面尝试分析这种优点的......
  • Makefile深入
    题目要求建立项目目录myutilxxxx(xxxx为学号后四位),子目录有:srcincludelibbin等源代码放入src,头文件放入include,生成的静态库,共享库放入lib,生成的中间文件,可执行文件放入bin编辑makefile放入mymath目录写出编译代码的makefile,编译出来的目标文件为testmyuti......
  • 用户态app Makefile 简易示例模板
    #Makefileforuser-spaceprogramexportPATH=/opt/toolchain/aarch64/bin/:$PATHCC:=aarch64-none-linux-gnu-gccDIR_PATH:=/home/user/sdk-v22.04/test_makefileOTHER_DUND_DIR:=$(DIR_PATH)/test_file_cOTHER_DUND_H:=$(DIR_PATH)/test_file_hCFLAGS:=-......