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

网站做用户记录聊城做企业网站

网站做用户记录,聊城做企业网站,金融公司做网站域名,网站页面设计规范书写规则 链接: Makefile(一)-介绍 接作者上一篇博客,我们继续讲述有关Makefile书写规则,上篇笔记有一些简单提到但没做解释的,也将在这次了解到。 目录书写规则规则示例规则的语法通配符以及使用通配符文件搜寻伪目…

书写规则

链接: Makefile(一)-介绍

接作者上一篇博客,我们继续讲述有关Makefile书写规则,上篇笔记有一些简单提到但没做解释的,也将在这次了解到。

目录

    • 书写规则
      • 规则示例
      • 规则的语法
      • 通配符以及使用通配符
      • 文件搜寻
      • 伪目标
      • 多目标
      • 静态模式
      • 自动生成依赖性

规则示例

foo.o : foo.c defs.h # foo 模块

cc -c -g foo.c

1、文件的依赖关系,foo.o 依赖于 foo.c 和 defs.h 的文件,如果 foo.c 和 defs.h 的

文件日期要比 foo.o 文件日期要新,或是 foo.o 不存在,那么依赖关系发生

2、如果生成或更新 foo.o 文件。也就是那个 cc 命令,其说明了如何生成 foo.o

这个文件。( foo.c 文件 include 了 defs.h 文件)

.

规则的语法

targets : prerequisites

command

或是这样:

targets : prerequisites ; command

command

targets 是文件名,以空格分开,可以使用通配符。

command 是命令行,如果其不与“target:prerequisites”在一行,那么,必须以[Tab键]开头,如果和 prerequisites 在一行,那么用分号做为分隔

命令太长,可以使用反斜框(‘\’)作为换行符
.

通配符以及使用通配符

通配符:

“*”:

代替了你一系列的文件

“*.c”表示所以后缀为 c 的文件

如果文件名中有通配符,如:“”,那么用转义字符“\”,如“*”来表示真实的“”字符,而不是任意长度的字符串。

“?”

“[…]”

“~”:

“~/test”,就表示当前用户的$HOME 目录下的 test 目录。

“~hchen/test”,则表示用户 hchen 的宿主目录下的 test 目录

“$?”是一个自动化变量

lpr -p $?

通配符在变量中展开,也就是让 objects 的值是所有[.o]的文件名的集合,由关键字“wildcard”指出

objects := $(wildcard *.o)

.

文件搜寻

在一些大的工程中,有大量的源文件,通常的做法是把这许多的源文件分类,并存放在不同的目录中。

当 make 需要去找寻文件的依赖关系时,可以在文件前加上路径,但更好的是把一个路径告诉 make,让 make 自动去找。

我们通过特殊变量“VPATH”去实现。

通常make 只会在当前的目录中去找寻依赖文件和目标文件。

如果定义了这个变量,make会在当前目录找不到的情况下,到所指定的目录中去找寻文件了。

VPATH = src:…/headers

上面的的定义指定两个目录,“src”和“…/headers”,make 会按照这个顺序进行搜索。目录由“冒号”分隔。

另一个设置文件搜索路径的方法是使用 make 的“vpath”关键字,它是全小写的,不是变量,这是一个 make 的关键字。

可指定不同的文件在不同的搜索目录中。它的使用方法有三种:

1、vpath

为符合模式的文件指定搜索目录。

2、vpath

清除符合模式的文件的搜索目录。

3、vpath

清除所有已被设置好了的文件搜索目录。

需要包含“%”字符,“%”的意思是匹配零或若干字符,例如,“%.h”表示所有以“.h”结尾的文件。

例如:

vpath %.h …/headers

该语句表示,要求 make 在“…/headers”目录下搜索所有以“.h”结尾的文件。

如果某文件在当前目录没有找到的话。

可以连续地使用 vpath 语句,以指定不同搜索策略。如果连续的 vpath 语句中出现了相同的,或是被重复了的,make 会按照 vpath 语句的先后顺序来执行搜索。

例如:

vpath %.c foo

vpath % blish

vpath %.c bar

其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录。

.

伪目标

“clean”的目标,这是一个“伪目标”,如:

clean:

rm *.o temp

“伪目标”并不是一个文件,只是一个标签,只是通过显示地指明这个“目标”才能让其生效

“伪目标”的取名不能和文件名重名

为了避免和文件重名的这种情况,我们可以使用一个特殊的标记“.PHONY”来显示地指明一个目标是“伪目标”

.PHONY : clean

伪目标同样也可成为依赖

.PHONY: cleanall cleanobj cleandiff

cleanall : cleanobj cleandiff

rm program

cleanobj :

rm *.o

cleandiff :

rm *.diff

“make cleanall”将清除所有要被清除的文件。“cleanobj”和“cleandiff”这两个伪目标有点像“子程序”的意思。

我们可以输入“make cleanall”、“make cleanobj”、“make cleandiff”命令来达到清除不同种类文件的目的。

.

多目标

Makefile 的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似。

例如:

bigoutput littleoutput : text.g

generate text.g -(substoutput,,(subst output,,(substoutput,,@) > $@

上述规则等价于:

bigoutput : text.g

generate text.g -big > bigoutput

littleoutput : text.g

generate text.g -little > littleoutput

其中,-(substoutput,,(subst output,,(substoutput,,@)中的“$”表示执行一个 Makefile 的函数,函数名为 subst,后面的为参数。

这里的这个函数是截取字符串的意思,“@”表示目标的集合,就像一个数组,“@”表示目标的集合,就像一个数组,“@”表示目标的集合,就像一个数组,​@”依次取出目标,并执于命令。

.

静态模式

静态模式可以更加容易地定义多目标的规则,可以让我们的规则变得更加的有弹性和灵活,语法:

<targets …>: : <prereq-patterns …>

例子:

objects = foo.o bar.o

all: $(objects)

$(objects): %.o: %.c

(CC) -c(CFLAGS) $< -o $@

等价于下面的规则:

foo.o : foo.c

(CC) -c(CFLAGS) foo.c -o foo.o

bar.o : bar.c

(CC) -c(CFLAGS) bar.c -o bar.o

目标从$object 中获取,“%.o”表明要所有以“.o”结尾的目标,依赖模式“%.c”则取模式“%.o”的“%”,也就是“foo bar”,并加下“.c”的后缀,依赖目标就是“foo.c bar.c”,

“$<”表示所有的依赖目标集(也就是“foo.c bar.c”),

“$@”表示目标集(也就是“foo.o bar.o”)

.

自动生成依赖性

main.o : main.c defs.h

一个比较大型的工程,你必需清楚哪些 C 文件包含了哪些头文件,添加在Makefile中。

在加入或删除头文件时,也需要小心地修改 Makefile,非常繁重且容易出错。

使用 C/C++编译的一个功能,

“-M”的选项,即自动找寻源文件中包含的头文件

cc -M main.c

其输出是:

main.o : main.c defs.h

使用 GNU 的 C/C++编译器,“-MM”参数

gcc -MM main.c


文章转载自:

http://P3gaKcEr.hctgn.cn
http://HznYZ9eR.hctgn.cn
http://cvnWeRig.hctgn.cn
http://kwuREvTP.hctgn.cn
http://LGHAA5k0.hctgn.cn
http://ZfMUwPPr.hctgn.cn
http://gjNhRpQo.hctgn.cn
http://lEqKFPa6.hctgn.cn
http://RUxp2Grt.hctgn.cn
http://WnnIwpxQ.hctgn.cn
http://SMpONWbf.hctgn.cn
http://RGQUrdCm.hctgn.cn
http://1SjCm3O9.hctgn.cn
http://iGjBWWJz.hctgn.cn
http://USqy9q7X.hctgn.cn
http://W5CTQkPe.hctgn.cn
http://DNeckVk2.hctgn.cn
http://LcT4yvRt.hctgn.cn
http://IweesZoB.hctgn.cn
http://m5XsOOgR.hctgn.cn
http://807bGmOw.hctgn.cn
http://4Jn1BeE3.hctgn.cn
http://DYFkMza9.hctgn.cn
http://cgefsNte.hctgn.cn
http://5klNGsrF.hctgn.cn
http://hzeev0R0.hctgn.cn
http://yWBEPcmu.hctgn.cn
http://zwVOwSwE.hctgn.cn
http://rslNGJIF.hctgn.cn
http://pIT2Mqog.hctgn.cn
http://www.dtcms.com/wzjs/744540.html

相关文章:

  • 软件开发和网站开发难度珠海高端网站开发
  • 内部链接网站大全沈阳模板建站定制
  • 单页面 网站怎么做oa管理系统报价
  • 上海建设银行网站上班时间做网站全体教程
  • 常州云之家网站建设网络公司怎么样网站开发短期培训
  • 网站dns设置那个网站做教学视频
  • 保定网站排名优化镇江市建设工程管理处网站
  • 网站开发的外文翻译网站一条龙服务
  • 为什么要给企业建设网站?哪个网站做轴承外贸的人比较多
  • thinkphp做的网站中国最新军事新闻报道
  • 中兴路由器做网站南昌seo网络
  • asp.net网站项目建设网站公司文化怎么做
  • WordPress网站运行时间广州微信网站建设报价表
  • wordpress做过的大型网站吗商丘网站建设推广渠道
  • 北京公司网站建设定广州 营销型网站
  • 平原县建设局网站360建筑网质量怎么样
  • 网站开发程序员衡东建设局网站
  • 诸城盟族网站建设wordpress后台500
  • app网站排名电子商务网站建设成本
  • 制作网站能挣钱速卖通网站怎样做店面的二维码
  • 镇江网站优化seo做网站有哪几种语言
  • 做便宜的宝贝的网站不买域名怎么做网站
  • 注册网站主体想找回备案如何做阳江市建设路龙源学校网站
  • 策划书的网站个人网上银行入口
  • 河南省汝州市建设网站北京网站空间
  • 青岛网站建设网址做护肤品好的网站好
  • 微餐饮网站建设用途网络平台营销
  • 顺德网站建设教程wordpress资源付费
  • 企业管理平台系统网站潍坊网站制作
  • 用什么开发和建设网站最好网站做md5脚本