指定目标
all
q个伪目标是所有目标的目标Q其功能一般是~译所有的目标?br />
clean
q个伪目标功能是删除所有被make创徏的文件?br />
install
q个伪目标功能是安装已编译好的程序,其实是把目标执行文件拷贝到指定的目标中厅R?br />
print
q个伪目标的功能是例出改变过的源文g?br />
tar
q个伪目标功能是把源E序打包备䆾。也是一个tar文g?br />
dist
q个伪目标功能是创徏一个压~文Ӟ一般是把tar文g压成Z文g。或是gz文g?br />
TAGS
q个伪目标功能是更新所有的目标Q以备完整地重编译用?br />
check和test
q两个伪目标一般用来测试makefile的流E?/div>
自动化变?/span>
$@
表示规则中的目标文g集。在模式规则中,如果有多个目标,那么Q?@是匚w于目标中模式定义的集合?br />
$^
所有的依赖目标的集合。以I格分隔。如果在依赖目标中有多个重复的,那个q个变量会去除重复的依赖目标Q只保留一份?br />
$? 所有比目标新的依赖目标的集合。以I格分隔?/div> $+ q个变量很像$^Q也是所有依赖目标的集合。只是它不去除重复的依赖目标?br /> $% 当规划的目标文g是库文gӞ$%表示规则中的目标成员名?br />例如Q如果一个目标是foo.a(bar.o)Q那么,$%是bar.oQ?@是foo.a?br />如果目标不是函数库文ӞUnix下是[.a]QWindows下是[.lib]Q,那么其gؓI?br /> $< 依赖目标中的W一个目标名字。如果依赖目标是以模式(?Q定义的Q那?<是W合模式的一pd的文仉。注意,其是一个一个取出来的?br />
例子:
CCLD = g ++ - Wall - g - o CC = g ++ - Wall - c OBJS = SocketServer . o TARGETS = 0928 . PHONY : all all : $(TARGETS) SocketServer . o : SocketServer . cpp $(CC) $ ^ 0928 : $(OBJS) main . cpp $(CCLD) $@ $ ^ @echo make success . PHONY : clean clean : # rm -rf ${OBJS} rm - rf *. o rm - rf $(TARGETS)
]]>
shell脚本中一些特D符?/title> http://www.shnenglu.com/aaxron/archive/2011/09/08/155359.html天下 天下 Thu, 08 Sep 2011 08:02:00 GMT http://www.shnenglu.com/aaxron/archive/2011/09/08/155359.html http://www.shnenglu.com/aaxron/comments/155359.html http://www.shnenglu.com/aaxron/archive/2011/09/08/155359.html#Feedback 0 http://www.shnenglu.com/aaxron/comments/commentRss/155359.html http://www.shnenglu.com/aaxron/services/trackbacks/155359.html shell脚本中一些特D符?br /> 1 、{} 大括P 用法一Q通配W扩?br /> 代码 : ls my_{finger, toe}s q条命o相当于如下命令的l合Q?br /> ls my_fingers my_toes mkdir {userA , userB , userC} - {home , bin , data} 我们得?nbsp;userA - home , userA - bin , userA - data , userB - home , userB - bin , userB - data , userC - home , userC - bin , userC - dataQ这几个目录 用法二:可用于语句块的构造,语句之间用回车隔开。如果你惛_某些使用单个语句的地方(比如在AND或OR列表中)使用多条语句Q你可以把它们括在花括号{}中来构造一个语句块?br /> 代码 : grep - v " $cdcatnum " $strack_file > $temp_file cat $temp_file > $strack_file echo cat - n file1 (注:以上大括号中的四句命令够成了一个语句块) 用法三:参数扩展 代码 : ${name:- default} 使用一个默认|一般是I|来代曉K些空的或者没有赋值的变量nameQ?br /> ${name := default}使用指定值来代替I的或者没有赋值的变量nameQ?br /> ${name :? message}如果变量为空或者未赋|那么׃昄出错误信息ƈ中止脚本的执行同时返回退出码1?br /> ${ # name} l出name的长?/span> ${name %word } 从name的尾部开始删除与word匚w的最部分,然后q回剩余部分 ${name % %word } 从name的尾部开始删除与word匚w的最镉K分,然后q回剩余部分 ${name # word} 从name的头部开始删除与word匚w的最部分,然后q回剩余部分 ${name # #word} 从name的头部开始删除与word匚w的最镉K分,然后q回剩余部分 Q注Qname为变量名Qword匚w的字W串Q?br />用法三在处理字符串和未知变量Ӟ是很有用的?br />2 、[] 中括P 用法一Q通配W扩展: 允许匚wҎ号中M一个单个字W?br /> 代码 : ls / [eh][to][cm] * 相当于执?nbsp;ls / etc / homeQ若?/span>/ eom目录Q就相当于会执行ls / etc / home / eomQ?br />注:在mkdir命o下不能扩?br />用法二:用于条g判断W号Q?br />[]W号可理解ؓ指向test命o的一个Y链接Q所以其用法可完全参照testQ将test位置替换为[便可?br /> 代码 : if [ " $? " != 0 ] {h?nbsp; if test " $? " != 0 then echo " Executes error " 3 、`command` 反引P `command`?(command)的含义相同,都是q回当前执行命o的结?br /> 代码 : # !/bin/sh for file in $(ls f *. sh); do lpr $file doneexit 0 该例实现了扩展f*. shl出所有匹配模式的文g的名字?br /> 4 ?/span>' string ' 单引?nbsp;?nbsp; " string " 双引?br />双引P如果惛_定义的变量中加入I格Q就必须使用单引h双引P 单、双引号的区别在于双引号转义Ҏ字符而单引号不{义特D字W?br /> 代码 : $ heyyou= home $ echo ' $heyyou ' $ $heyyou Q?/span>$没有转义 Q?br /> eg : $ heyyou = home $ echo " $heyyou " $ home Q很明显Q?/span>$转义了输Zheyyou变量的?/span>Q?br /> 5 ? # 它的作用是告诉你引用变量的L量是多少Q?/span> 代码: $$ 它的作用是告诉你shell脚本的进E号Q?br /> $* 以一个单字符串显C所有的脚本传递的参数。等价于$ 1 $ 2 $ 3 .Q?br /> $@ ? * 基本cMQ参见序?Q,但在数组赋值时有些不同Q?br /> $ ? 前一个命令的退出码Q?br /> $ - 昄shell使用的当前选项Q?br /> $ ! 最后一个后台运行的q程ID受?br /> 6 ?(( ))语法Q对括号内的表达式求?br /> 代码 : # !/bin/sh x = 0 hile [ " $x " - ne 10 ]; do echo $x x= $(( $x + 1 )) done exit 0 7 、shell中几U特D的参数变量的引?br /> 代码 : $1 ? 2 ? 3 ……${ 10 }?{ 11 }?{ 12 }…… Q表C本传入的的各个参敎ͼ注意当需表示两位C后的参数时数字要用花括号括v?br /> $@ 列出所有的参数Q各参数用空格隔开 $ *: 列出所有的参数Q各参数用环境变量IFS的第一个字W隔开 8 、命令列表: AND列表 statement1 && statement2 && statement3 && … : 只有在前面所有的命o都执行成功的情况下才执行后一条命?br />OR列表 statement1 || statement2 || statement3 || … : 允许执行一pd命o直到有一条命令成功ؓ止,其后所有命令将不再被执?br /> # !/bin/sh 代码: touch file_one rm - f file_two if [ - f file_one ] && echo " hello " && [ - f file_two ] && echo " there " then echo " in if " else echo " in else " fi exit 0 上例的输ZؓQ?br /> 代码: hello in else 关于AND列表与OR列表Q在逻辑判断中很使用Q下面就举一个其最常用的例子: 代码: [ condition ] && command for true || command for false : 当条件ؓ真时Q执行commandfor true , 当条件ؓ假时Q执行command for false 9 ?/span>: 冒号Q内建空指oQ返回gؓ0 代码 : $ : $ echo $? $ 0 while : (该语句结构可实现一个无限@? 10 ? 分号 : ?nbsp;shell 中,担Q " q箋指o " 功能的符号就?/span>" 分号 " 代码: cd ~/ backup ; mkdir startup ; cp ~/.* startup /. 11 ?/span># 井号Q表C符号后面的是注解文字,不会被执行; 代码 : * 匚w文g名中的Q何字W,包括字符Ԍ ? 匚w文g名中的Q何单个字W?br /> ~ 代表使用者的 home 目录 12 ?/span>\ 反斜U: 攑֜指o前,有取?nbsp;aliasesQ别名) 的作用; 攑֜ҎW号前,则该ҎW号的作用消失; 攑֜指o的最末端Q表C指令连接下一行(使得回RW无效,只v换行作用Q?br /> 13 ?/span>! 感叹P 通常它代表反逻辑的作用,譬如条g侦测中,?nbsp; != 来代?/span>" 不等?/span>" 14 ?/span>** ơ方q算Q两个星号在q算时代?nbsp; " ơ方 " 的意?br />代码 : let " sus=2**3 " echo " sus = $sus " $ sus = 8 -