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

河北建设厅网站初始密码二级建造师报名官网

河北建设厅网站初始密码,二级建造师报名官网,从事网站建,微信做爰视频网站文章目录 简介1 规则1.1规则的执行 2 变量3 模式匹配tips:规则同名处理机制4 函数4.1 wildcard4.2 patsubst 5 练习5.1 clean 简介 make 是解释 makefile中指令的工具 1 规则 target,target...:depend1, depend2,...commandcommand... # 单目标 app:a.c, b.c, c.…

文章目录

    • 简介
    • 1 规则
      • 1.1规则的执行
    • 2 变量
    • 3 模式匹配
    • tips:规则同名处理机制
    • 4 函数
      • 4.1 wildcard
      • 4.2 patsubst
    • 5 练习
      • 5.1 clean

简介

make 是解释 makefile中指令的工具

1 规则

target,target...:depend1, depend2,...commandcommand...
# 单目标
app:a.c, b.c, c.cgcc a.c b.c c.c -o app# 多目标
app1, app2: a.cpp b.cppgcc a.cpp -o app1gcc b.cpp -o app2# 规则的嵌套
app: a.o, b.ogcc a.o b.o -o app
a.o: a.cgcc -c a.c 
b.o: b.cgcc -c b.c
  • command: 一般是shell命令,前面需要tab缩进,并且独占一行

  • depend:命令需要的依赖,可以多个,也可以为空

  • target:命令生成的目标,执行命令后可以不生成任何文件,这样的目标是 伪目标

1.1规则的执行

# in makefile
app: depent1echo "first -1"echo "first -2"depend:"empty"
depent1: echo "depend 1 skip last-empty-depend"touch test.md

result:

liyb@lyb:/tmp/test_makefile$ make
echo "depend 1 skip last-empty-depend"
depend 1 skip last-empty-depend
echo "first -1"
first -1
echo "first -2"
first -2
# 并且目录中生成了test.md文件
  • 可以看到,make只执行第一条规则,以及与之嵌套的规则

  • 在执行 command的时候,会先输出command本身,再执行命令

  • 不在第一个规则之中提及的的规则默认是不被执行的

  • 执行指定的一条规则

# make target
# 这里“empty”不是一个shell命令,所以报错,说明确实执行到了
liyb@lyb:/tmp/test_makefile$ make depend
"empty" 
/bin/sh: 1: empty: not found
make: *** [makefile:6:depend] 错误 127

1.2 文件的时间戳

  • 并不是每次make 都会更新目标
  • 如果target的时间戳小于depend (depend更新过),这时候才会重新生成target
  • 另外,如果target 是一个伪目标(depend如果是伪的也是),每次make都会更新,因为没有这个文件/依赖呀

1.3 make工具的自动推导

如果我们写的规则并不严谨,缺乏了某些依赖,在一定程度上它可以帮我们自动生成

例如:依赖中有a.o,但是目录中只有a.c,那么make会使用cc命令自动生成a.o 供目标使用

liyb@lyb:/tmp/test_makefile$ make
cc    -c -o a.o a.c # 由于缺少a.o 但是存在a.c ,于是make使用cc命令自动推导出了a.o的生成命令
g++ a.o -o app  # 这里是makefile的真实的全部的command

2 变量

抛砖引玉:上面说到,make会比较时间戳来判断是否重新生成,那么当依赖非常多的时候,这个操作是非常耗时间的,并且依赖难免有很多重复性的操作,这时候怎么办呢?

三种变量供你使用:

  • 1 自定义变量
# 定义 变量名 = 赋值(必须赋值)
abc = a.c b.c 
# 使用 $(变量名)
gcc $(abc) 
  • 2 预定义变量
    | 变量名 | 含义 | 默认值 |
    | — | — | — |
    | AR | 生成静态库库文件的程序名称 | ar |
    | AS | 汇编编译器的名称 | as |
    | CC | C 语言编译器的名称 | cc |
    | CPP | C 语言预编译器的名称 | $(CC) -E |
    | CXX | C++ 语言编译器的名称 | g++ |
    | FC | FORTRAN 语言编译器的名称 | f77 |
    | RM | 删除文件程序的名称 | rm -f |
    | ARFLAGS | 生成静态库库文件程序的选项 | 无默认值 |
    | ASFLAGS | 汇编语言编译器的编译选项 | 无默认值 |
    | CFLAGS | C 语言编译器的编译选项 | 无默认值 |
    | CPPFLAGS | C 语言预编译的编译选项 | 无默认值 |
    | CXXFLAGS | C++ 语言编译器的编译选项 | 无默认值 |
    | FFLAGS | FORTRAN 语言编译器的编译选项 | 无默认值 |

  • 3 自动变量(只能在规则的命令中使用)

以下是 Makefile 中常用自动变量的含义整理,结合了 Makefile 官方文档和实际使用场景的解析:

变量含义应用场景示例
$*目标文件的主干名(不包含扩展名)在模式规则 %.o: %.c 中,若目标为 main.o,则 $* 表示 main
$+所有依赖文件列表(包含重复项,按出现顺序排列)需要保留重复依赖时使用,例如链接库文件多次依赖的场景。
$<第一个依赖文件的名称编译单个源文件时常用,如 gcc -c $< -o $@
$?比目标文件新的依赖文件列表(以空格分隔)仅重新编译已修改的依赖文件时使用,常用于增量构建优化。
$@目标文件的完整名称(含扩展名)通用规则中指定输出文件名,如 gcc $^ -o $@
$^所有不重复的依赖文件列表(自动去重,以空格分隔)链接多个对象文件时使用,避免重复依赖导致的错误 。

3 模式匹配

使用% 作为通配符

%.0: %.cgcc -c $< 

tips:规则同名处理机制

  • 同名规则会合并依赖,后面规则命令会覆盖前面的规则命令
  • 还是遵循只看第一个target的规则,只是叫target的规则不止一个
  • 显示规则会覆盖隐式规则(这时候就不一定第一个生效了)
  • 至于隐式规则,模糊的概念就是make默认的,不需要写出来了,比如上面的自动推导,但这只是其中一种,这里很模糊就不管了。
liyb@lyb:/tmp/test_makefile$ cat makefile 
# 自动推导所有 .c 生成 .o 
%.o: %.c echo "模式匹配 "
app: a.cecho "app"gcc a.c -o app
liyb@lyb:/tmp/test_makefile$ make
echo "app"
app
gcc a.c -o app

4 函数

所有的函数都是有返回值的,因此需要使用$()解出来

4.1 wildcard

搜索路径下指定类型的文件

# 语法 
wildcard path/*.0   *.c*.c 当前目录下.c后缀的文件
# 例子
depends = $(wildcard *.c)
app: $(depends)gcc $^ -o app

4.2 patsubst

不改变文件名称替换后缀,这里仅仅是字符串的替换,文件本身没有变化,得到的是一个字符串

src = $(wildcard *.c)
depends = $(patsubst %.c, %.o, $(src))
app: $(depends)gcc $^ -o app

5 练习

# 目录结构
.
├── include
│   └── head.h	==> 头文件, 声明了加减乘除四个函数
├── main.c		==> 测试程序, 调用了head.h中的函数
└── src├── add.c	==> 加法运算├── div.c	==> 除法运算├── mult.c  ==> 乘法运算└── sub.c   ==> 减法运算

不同方法的理解:

方法1:直接使用.c文件编译

src = $(wildcard ./src/*.c *.c)
# depends = $(patsubst %.c, %.o, $(src)) 
include = ./include
target = app
${target}: $(src) gcc $^  -I$(include) -o $@# %.o: %.c
#	gcc -c $< -I$(include) -o  $@# .PHONY:clean#clean:
#	-rm $(depends) $(target) -f

坏处: 不好设置clean ,因为clean删除的是.0文件,但是这种方法并没有操作.0文件,导致clean的时候还是要查找.o ,那既然如此,不如直接操作.o

方法二:使用.o文件编译

src = $(wildcard ./src/*.c *.c)
depends = $(patsubst %.c, %.o, $(src)) 
include = ./include
target = app
${target}: $(depends) gcc $^ -o $@%.o: %.cgcc -c $< -I$(include) -o  $@.PHONY:clean
clean:-rm $(depends) $(target) -f
  • 先查找所有的源文件
  • 将文件名改名替换得到一个.o的字符串
  • 使用.o作为依赖
  • 模式匹配.o,使用搜索头文件目录的参数-I
  • 因为头文件已经被加入了.o,不需要重复搜索头文件了

5.1 clean

clean作为一个规则定义

  • 由于是伪目标,并且不在第一个规则嵌套里,make并不会执行他
  • .PHONY
    • 用来声明是伪目标
    • 如果不加的话,当目录里真的有这个名称的文件的时候,他就不是伪目标了,他就是一个真的目标,所以就有时间戳,前面说到,如果项目没有更改,就不会执行,那clean就失去了作用
    • 加上.PHONY 声明这是一个伪目标,即使有同名文件,也不影响make把他当做没有时间戳的目标执行
  • 如果不定义clean是没法使用 make clean的,这里明白了clean其实是个规则,并不是默认的一个命令

文章转载自:

http://NiW4CBpJ.Ljngm.cn
http://w9lDNgtF.Ljngm.cn
http://LkdCjjV9.Ljngm.cn
http://OJzjVxQr.Ljngm.cn
http://aKaALTSM.Ljngm.cn
http://mA9GQGlX.Ljngm.cn
http://25IzEJf4.Ljngm.cn
http://MWnTbwoT.Ljngm.cn
http://6ojvCQcd.Ljngm.cn
http://wjFTcVhG.Ljngm.cn
http://GWxgOOl5.Ljngm.cn
http://zJmh5NGk.Ljngm.cn
http://RZhyEqSh.Ljngm.cn
http://phMSeQ53.Ljngm.cn
http://IbEHdUoI.Ljngm.cn
http://3OidPs3A.Ljngm.cn
http://O6KEHcxV.Ljngm.cn
http://Hf1fzbNZ.Ljngm.cn
http://SAg0n9xb.Ljngm.cn
http://iEuwqRux.Ljngm.cn
http://MHGrmOzI.Ljngm.cn
http://uTQrBFnA.Ljngm.cn
http://nd8JXmrT.Ljngm.cn
http://lcTer1FH.Ljngm.cn
http://xl8WE9pI.Ljngm.cn
http://waRBaHww.Ljngm.cn
http://6HdkIkmm.Ljngm.cn
http://RSGqpngp.Ljngm.cn
http://uKd23NAL.Ljngm.cn
http://ujA2rfmT.Ljngm.cn
http://www.dtcms.com/wzjs/738049.html

相关文章:

  • 做的网站有广告整合营销的成功案例
  • python适合网站开发吗wordpress电影插件
  • 烟台市做网站网站开发专业的建设设想
  • 启动培训网站建设的请示网站建设的主要情况说明书
  • 用外服务器做网站建h5网站费用
  • 宿州网站建设电话g3云推广是什么
  • 重庆美食制作重庆seo排名技术
  • 乐山建设企业网站宣威市住房与城乡建设局网站
  • 好的h5制作网站模板wordpress防攻击代码
  • 网站开发使用哪种工具好黑河做网站的
  • 济南智能网站建设咨询电话建设网站过程中
  • 游戏点卡平台网站开发宁夏建设银行官方网站
  • 导购网站怎么做织梦做的相亲网站
  • 临西网站建设企业文化展厅设计方案
  • 网页与网站的关系性男女做视频网站
  • 嘉兴网站建设解决方案一个好的网站怎样布局
  • 做网站用百度地图和天地图seo网站打开慢
  • html5企业网站案例上海民营企业500强名单
  • 网站空间哪家做的好建设网站有哪些步骤
  • 网站霸屏对网站好吗建设局网站招聘
  • 安康鼎盛网站建设广州营销型网站建设
  • 网站后台别人制作推广计划名称
  • 企业网站seo多少钱新手学做网站看什么书
  • 网页设计接私单的网站青年汇网站开发公司
  • 刚做的网站怎么快速搜索到极速网站开发
  • 做网站需要的参考文献外贸建站及推广
  • 中移建设 公司 网站政务网站信息化建设情况
  • 全屏网站是什么意思wordpress redis 插件
  • 珠宝类网站模板wordpress多站点 用户同步
  • 2019流行做什么网站网站phpcms移动端网站怎么做