
make&shell
文章平均质量分 76
jgzsygg
这个作者很懒,什么都没留下…
展开
-
Makefile基本一之大体语法组成
基本简介:一. 组成概述目标:依赖命令二. 自动推导其可以自动推导文件和文件依赖后面的关系例子:objects = main.o kbd.o command.o display.o \insert.o search.o files.o utils.oedit : $(objects)cc -o edit $(objects)$(objects) : de原创 2017-09-28 14:08:27 · 404 阅读 · 0 评论 -
Makefile九之foreach,if,call函数
1. foreachforeach 函数和别的函数非常的不一样。因为这个函数是用来做循环用的, Makefile中的 foreach 函数几乎是仿照于 Unix 标准 Shell(/bin/sh)中的 for 语句,或是 C-Shell(/bin/csh)中的 foreach 语句而构建的。它的语法是:$(foreach ,,)这个函数的意思是,把参数中的单词逐一取出放到参数所指定转载 2017-09-30 13:59:43 · 882 阅读 · 0 评论 -
Makefile十之origin函数
origin 函数不像其它的函数,他并不操作变量的值,他只是告诉你你的这个变量是哪里来的?其语法是:$(origin )注意,是变量的名字,不应该是引用。所以你最好不要在中使用“$”字符。Origin 函数会以其返回值来告诉你这个变量的“出生情况”,下面,是 origin函数的返回值:“undefined”如果从来没有定义过,origin 函数返回这个值“undefined”。转载 2017-09-30 14:06:15 · 370 阅读 · 0 评论 -
Makefile十一之shell函数和控制make函数
shell函数shell 函数也不像其它的函数。顾名思义,它的参数应该就是操作系统 Shell 的命令。它和反引号“`”是相同的功能。这就是说, shell 函数把执行操作系统命令后的输出作为函数返回。于是,我们可以用操作系统命令以及字符串处理命令 awk,sed 等等命令来生成一个变量,如:contents := $(shell cat foo)files := $(shell ec转载 2017-09-30 14:12:45 · 774 阅读 · 0 评论 -
Makefile十二之make的运行
一、 make 的退出码make 命令执行后有三个退出码:0 - 表示成功执行。1 - 如果 make 运行时出现任何错误,其返回 1。2 - 如果你使用了 make 的“-q”选项,并且 make 使得一些目标不需要更新,那么返回 2。 二、指定 Makefile前面我们说过,GNU make 找寻默认的 Makefile 的规则是在当前目录下依次找三个文转载 2017-09-30 14:21:17 · 236 阅读 · 0 评论 -
Makefile十三之make参数
有时候,我们不想让我们的 makefile 中的规则执行起来,我们只想检查一下我们的命令,或是执行的序列。于是我们可以使用 make 命令的下述参数:“-n”“--just-print”“--dry-run”“--recon”不执行参数,这些参数只是打印命令,不管目标是否更新,把规则和连带规则下的命令打印出来,但不执行,这些参数对于我们调试 makefile 很有用处。“-转载 2017-09-30 14:24:51 · 525 阅读 · 0 评论 -
Makefile十五隐含规则的变量
在隐含规则中的命令中,基本上都是使用了一些预先设置的变量。你可以在你的makefile 中改变这些变量的值,或是在 make 的命令行中传入这些值,或是在你的环境变量中设置这些值,无论怎么样,只要设置了这些特定的变量,那么其就会对隐含规则起作用。当然, 你也可以利用 make 的“-R”或“--no–builtin-variables”参数来取消你所定义的变量对隐含规则的作用。 例如,转载 2017-09-30 14:41:42 · 350 阅读 · 0 评论 -
Makefile十四之隐含规则
1. 概述隐含规则,在一些在 Makefile 中的“隐含的”,早先约定了的,不需要我们再写出来的规则。如果要使用隐含规则生成你需要的目标,你所需要做的就是不要写出这个目标的规则。那么,make 会试图去自动推导产生这个目标的规则和命令,如果 make 可以自动推导生成这个目标的规则和命令,那么这个行为就是隐含规则的自动推导。当然,隐含规则是 make 事先约定好的转载 2017-09-30 14:35:14 · 271 阅读 · 0 评论 -
Makefile十六之模式规则及其自动化变量
你可以使用模式规则来定义一个隐含规则。一个模式规则就好像一个一般的规则,只是在规则中,目标的定义需要有"%"字符。"%"的意思是表示一个或多个任意字符。在依赖目标中同样可以使用"%",只是依赖目标中的"%"的取值,取决于其目标。有一点需要注意的是,"%"的展开发生在变量和函数的展开之后,变量和函数的展开发生在 make 载入 Makefile 时,而模式规则中的"%"则发生在运行时转载 2017-09-30 14:54:30 · 276 阅读 · 0 评论 -
Makefile十七之后缀规则和隐含规则的搜索算法
后缀规则是一个比较老式的定义隐含规则的方法。后缀规则会被模式规则逐步地取代。因为模式规则更强更清晰。为了和老版本的 Makefile 兼容,GNU make 同样兼容于这些东西。后缀规则有两种方式:"双后缀"和"单后缀"。双后缀规则定义了一对后缀:目标文件的后缀和依赖目标(源文件)的后缀。如".c.o"相当于"%o : %c"。单后缀规则只定义一个后缀,也就是源文件的后缀。如".c"相当于"%转载 2017-09-30 15:39:32 · 455 阅读 · 0 评论 -
Makefile十八之更新函数库
一个函数库文件由多个文件组成。你可以以如下格式指定函数库文件及其组成:archive(member)这个不是一个命令,而一个目标和依赖的定义。一般来说,这种用法基本上就是为了"ar"命令来服务的。如:foolib(hack.o) : hack.oar cr foolib hack.o如果要指定多个 member,那就以空格分开,如:foolib(hack.o kludg转载 2017-10-09 11:45:18 · 383 阅读 · 0 评论 -
Makefile博客记录和命令记录
博客http://www.cnblogs.com/wang_yb/p/3990952.html转载 2017-09-28 14:41:45 · 181 阅读 · 0 评论 -
Makefile基础之二使用,引用和环境变量MAKEFILES
1. 使用make命令会根据顺序寻找MAKEFILE文件 “GNUmakefile” ,"makefile","Makefile"也可以自己指定 make -f xxx2. 引用 include引用支持shell的通配符寻找文件路径如下:2.1 当前目录2.2 如果 make 执行时,有“-I”或“--include-dir”参数,那么 make 就会在这个参数转载 2017-09-28 14:23:47 · 493 阅读 · 0 评论 -
Makefile的工作流程
1、读入所有的 Makefile。2、读入被 include 的其它 Makefile。3、初始化文件中的变量。4、推导隐晦规则,并分析所有规则。5、为所有的目标文件创建依赖关系链。6、根据依赖关系,决定哪些目标要重新生成。7、执行生成命令。1-5 步为第一个阶段,6-7 为第二个阶段。第一个阶段中,如果定义的变量被使用了,那么,make 会把其展开在使用的位置。但转载 2017-09-28 14:48:59 · 528 阅读 · 0 评论 -
shell基本
传参和判断例子: if [ $# != 0 ]; then if [ $1 == "read" ]; then vim gsReport.txt fi else echo "you can input \"read\" to open the report" fi转载 2017-09-20 11:31:32 · 273 阅读 · 0 评论 -
Makefile基础三之书写规则
0. 语法规则 targets : prerequisitescommand...或是这样:targets : prerequisites ; commandcommand... 1. 通配符在规则语法中可以直接使用通配符,其会自动展开如果是赋值给变量,需要 wildcard 关键字。 如 objects := $(wildcard *.o)转载 2017-09-28 14:59:03 · 191 阅读 · 0 评论 -
Makefile四书写命令
一. 显示命令如果 make 执行时,带入 make 参数“-n”或“--just-print”,那么其只是显示命令,但不会执行命令,这个功能很有利于我们调试我们的 Makefile,看看我们书写的命令是执行起来是什么样子的或是什么顺序的。而 make 参数“-s”或“--slient”则是全面禁止命令的显示。 二. 命令执行当依赖目标新于目标时,也就是当规则的目标需要转载 2017-09-28 16:17:03 · 283 阅读 · 0 评论 -
Makefile五之使用变量
1. 变量的简单实用Make的变量类似C的宏是种替换= ,赋值$( ) ,取变量值2. 变量中的变量在定义变量的值时,我们可以使用其它变量来构造变量的值,在 Makefile 中有四种方式来在用变量定义变量的值。第一种方式,也就是简单的使用“=”号,前面的变量可以使用后面定义的值。如:foo = $(bar)bar = $(ugh)ugh =转载 2017-09-28 16:44:23 · 353 阅读 · 0 评论 -
Makefile六条件语句
条件表达式的语法为:endif以及:elseendif 其中表示条件关键字,如“ifeq”。这个关键字有四个。第一个是我们前面所见过的“ifeq” 。比较参数“arg1”和“arg2”的值是否相同。ifeq (, )ifeq '' ''ifeq "" ""ifeq "" ''ifeq '' "" 第转载 2017-09-28 17:19:22 · 217 阅读 · 0 评论 -
Makefile七之字符串处理函数
函数概述函数调用,很像变量的使用,也是以“$”来标识的,其语法如下:$( )或是${ }这里,就是函数名,make 支持的函数不多。是函数的参数,参数间以逗号“,”分隔,而函数名和参数之间以“空格”分隔。函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。 1、 subst$(subst ,,)名称:字符串替换函数——subst。功转载 2017-09-28 18:05:08 · 1004 阅读 · 0 评论 -
Makefile八之文件操作函数
1、 dir$(dir )名称:取目录函数——dir。功能:从文件名序列中取出目录部分。目录部分是指最后一个反斜杠(“/”)之前的部分。如果没有反斜杠,那么返回“./”。返回:返回文件名序列的目录部分。示例: $(dir src/foo.c hacks)返回值是“src/ ./”。 2、 notdir$(notdir )名称:取文件函数——n转载 2017-09-28 18:08:30 · 280 阅读 · 0 评论 -
Makefile额外之特殊目标
.PHONY:目标“.PHONY”的所有的依赖被作为伪目标。伪目标时这样一个目标:当使用make命令行指定此目标时,这个目标所在规则定义的命令、无论目标文件是否存在都会被无条件执行。参考 4.6 Makefile伪目标 一节.SUFFIXES:特殊目标“SUFFIXES”的所有依赖指出了一系列在后缀规则中需要检查的后缀名(就是当前make需要处理的后缀) 。参考 10.7 后缀规则 一转载 2017-11-17 23:03:55 · 331 阅读 · 0 评论