- 浏览: 1439578 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
getelephantbyid:
make 无法通过.....
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
getelephantbyid:
patch -p1 ../php-5.4.7_thttpd-2 ...
php-5.3,php-5.4的thttpd2.25b补丁,及编译方法 -
zander:
zander 写道c 语言是静态类型语言还是动态类型语言阅读理 ...
什么是动态语言和静态语言? -
zander:
c 语言是静态类型语言还是动态类型语言
什么是动态语言和静态语言? -
lunajiayou:
很有道理,赞一个
跟着苍蝇会找到厕所,跟着蜜蜂会找到花朵
shell脚本中的特殊变量
1. $# 传递到脚本的参数个数
2. $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
3. $$ 脚本运行的当前进程ID号
4. $! 后台运行的最后一个进程的进程ID号
5. $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
6. $- 显示shell使用的当前选项,与set命令功能相同
7. $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
$0 | 脚本名字 |
$1 | 位置参数 #1 |
$2 - $9 | 位置参数 #2 - #9 |
${10} | 位置参数 #10 |
$# | 位置参数的个数 |
"$*" | 所有的位置参数(作为单个字符串) * |
"$@" | 所有的位置参数(每个都作为独立的字符串) |
${#*} | 传递到脚本中的命令行参数的个数 |
${#@} | 传递到脚本中的命令行参数的个数 |
$? | 返回值 |
$$ | 脚本的进程ID(PID) |
$- | 传递到脚本中的标志(使用set ) |
$_ | 之前命令的最后一个参数 |
$! | 运行在后台的最后一个作业的进程ID(PID) |
makefile中的自动化变量
下面对所有的自动化变量进行说明:
$@
表示规则的目标文件名。如果目标是一个文档文件( Linux 中,一般称 .a 文件为文档文件,也称为静态库文件),那么它代表这个文档的文件名。在多目标模式规则中,它代表的是哪个触发规则被执行的目标文件名。
$%
当规则的目标文件是一个静态库文件时,代表静态库的一个成员名。例如,规则的目标是“ foo.a(bar.o) ”,那么,“ $% ”的值就为“ bar.o ”,“ $@ ”的值为“ foo.a ”。如果目标不是静态库文件,其值为空。
$<
规则的第一个依赖文件名。如果是一个目标文件使用隐含规则来重建,则它代表由隐含规则加入的第一个依赖文件。
$?
所有比目标文件更新的依赖文件列表,空格分割。如果目标是静态库文件名,代表的是库成员( .o 文件)。
$^
规则的所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的只能是所有库成员( .o 文件)名。一个文件可重复的出现在目标的依赖中,变量“ $^ ”只记录它的一次引用情况。就是说变量“ $^ ”会去掉重复的依赖文件。
$+
类似“ $^ ”,但是它保留了依赖文件中重复出现的文件。主要用在程序链接时库的交叉引用场合。
$*
在模式规则和 静态模式规则 中,代表“茎”。“茎”是目标模式中“ % ”所代表的部分(当文件名中存在目录时,“茎”也包含目录(斜杠之前)部分)。例如:文件“ dir/a.foo.b ”,当目标的模式为“ a.%.b ”时,“ $* ”的值为“ dir/a.foo ”。“茎”对于构造相关文件名非常有用。
自动化变量“ $* ”需要两点说明:
? 对于一个明确指定的规则来说不存在“茎”,这种情况下“ $* ”的含义发生改变。此时,如果目标文件名带有一个可识别的后缀,那么“ $* ”表示文件中除后缀以外的部分。例如:“ foo.c ”则“ $* ”的值为:“ foo ”,因为 .c 是一个可识别的文件后缀名。 GUN make 对明确规则的这种奇怪的处理行为是为了和其它版本的 make 兼容。通常,在除静态规则和模式规则以外,明确指定目标文件的规则中应该避免使用这个变量。
? 当明确指定文件名的规则中目标文件名包含不可识别的后缀时,此变量为空。
自动化变量“ $? ”在显式规则中也是非常有用的,使用它规则可以指定只对更新以后的依赖文件进行操作。例如,静态库文件“ libN.a ”,它由一些 .o 文件组成。这个规则实现了只将更新后的 .o 文件加入到库中:
lib: foo.o bar.o lose.o win.o
ar r lib $?
以上罗列的自动量变量中。其中有四个在规则中代表文件名( $@ 、 $< 、 $% 、 $* )。而其它三个的在规则中代表一个文件名列表。 GUN make 中,还可以通过这七个自动化变量来获取一个完整文件名中的目录部分和具体文件名部分。在这些变量中加入“ D ”或者“ F ”字符就形成了一系列变种的自动环变量。这些变量会出现在以前版本的 make 中,在当前版本的 make 中,可以使用“ dir ”或者“ notdir ”函数来实现同样的功能。
$(@D)
表示目标文件的目录部分(不包括斜杠)。如果“ $@ ”是“ dir/foo.o ”,那么“ $(@D) ”的值为“ dir ”。如果“ $@ ”不存在斜杠,其值就是“ . ”(当前目录)。注意它和 函数“ dir” 的区别!
$(@F)
目标文件的完整文件名中除目录以外的部分(实际文件名)。如果“ $@ ”为“ dir/foo.o ”,那么“ $(@F) ”只就是“ foo.o ”。“ $(@F) ”等价于函数“ $(notdir $@) ”。
$(*D)
$(*F)
分别代表目标“茎”中的目录部分和文件名部分。
$(%D)
$(%F)
当以如“ archive(member) ”形式静态库为目标时,分别表示库文件成员“ member ”名中的目录部分和文件名部分。它仅对这种形式的规则目标有效。
$(<D)
$(<F)
分别表示规则中第一个依赖文件的目录部分和文件名部分。
$(^D)
$(^F)
分别表示所有依赖文件的目录部分和文件部分(不存在同一文件)。
$(+D)
$(+F)
分别表示所有依赖文件的目录部分和文件部分(可存在重复文件)。
$(?D)
$(?F)
分别表示被更新的依赖文件的目录部分和文件名部分。
在讨论自动化变量时,为了和普通变量(如:“ CFLAGS ”)区别,我们直接使用了“ $< ”的形式。这种形式仅仅是为了和普通变量进行区别,没有别的目的。其实对于自动环变量和普通变量一样,代表规则第一个依赖文件名的变量名实际上是“ < ”,我们完全可以使用“ $(<) ”来替代“ $< ”。但是在引用自动化变量时通常的做法是“ $< ”,因为自动化变量本身是一个特殊字符。
GUN make 同时支持“ Sysv ”特性,允许在规则的依赖列表中使用特殊的变量引用(一般的自动化变量只能在规则的命令行中被引用)“ $$@ ”、“ $$(@D) ”和“ $$(@F) ”(注意:要使用“ $$ ”),它们分别代表了“目标的完整文件名”、“目标文件名中的目录部分”和“目标的实际文件名部分”。这三个特殊的变量只能用在明确指定目标文件名的规则中或者是静态模式规则中,不用于隐含规则中。另外 Sysv make 和 GNU make 对规则依赖的处理也不尽相同。 Sysv make 对规则的依赖进行两次替换展开,而 GUN make 对依赖列表的处理只有一次,对其中的变量和函数引用直接进行展开。
自动化变量的这个古怪的特性完全是为了兼容 Sysv 版本的 makefile 文件。在使用 GNU make 时可以不考虑这个,也可以在 Makefile 中使用伪目标“ .POSIX ”来禁止这一特性。
发表评论
-
google pagespeed禁用改写html文件的cache头
2019-09-04 19:51 434这会禁用html文件的缓存,无法读取last-modifi ... -
macos 安装imagick解决php不能显示验证码的问题
2018-11-04 04:15 1156需要选安装pear,然后用pecl install imagi ... -
linux入侵检测
2018-07-07 22:58 639一、检查系统日志 l ... -
yii的安全策略
2018-07-06 04:02 399web根目录下.htaccess 写道 Options ... -
免费Web防火墙
2018-07-06 01:21 5591,modsecurity 基于apache 历史最悠久 ... -
两款免费好用的Web渗透工具
2018-07-06 01:12 9421,OWASP Zed Attack Proxy (ZAP ... -
apache2反向代理
2018-06-12 18:46 796开启以下两个模块 a2enmod proxy a2enm ... -
扩展Aws云主机磁盘大小
2018-03-05 21:17 1327进入ELASTIC BLOCK STORE-》卷 选中要修 ... -
ubuntu时区设置
2018-02-25 10:41 659查看当前时区 timedatectl 修改时区 dpk ... -
macos 10.13 dmg下载和安装盘制作
2018-02-05 19:58 9901https://bbs.feng.com/read-htm-t ... -
windows升级后 iis服务无效 IIS-W3SVC-WP 无法读取配置文件
2017-12-01 11:35 1554通过使用以管理员身份运行选项打开 Windows PowerS ... -
vmware中运行的macos连接iphone
2017-09-30 17:53 2232需要iphone插在usb2.0端口上,并且虚拟机usb兼容性 ... -
brotli压缩算法说明
2017-06-09 02:36 1224brotli是新一代的HTTP压缩算法,用于替代gzip,相 ... -
TCP Fast Open说明
2017-06-09 02:34 6995相关介绍 https://lwn.net/Article ... -
使用strongswan建立基于ikev2 eap-mschapv2的ipsec服务器
2017-04-17 23:14 3088sudo apt-get install strongsw ... -
使用strongswan/xl2tpd建立ipsec/l2tp服务器
2017-04-17 22:32 6033sudo apt-get install strongsw ... -
SecureFX中文件名乱码的解决
2014-08-28 03:23 3282原始贴子:https://forums.vandyke.c ... -
禁用htc one m7官方内核的写保护
2014-08-26 14:52 1246老外写的内核模块源码:https://github.com ... -
windows和office的kms激活方法(windows 企业版,office vl版可用)
2013-03-17 19:28 21windows 激活windows 8slmgr.vbs /i ... -
windows 8 64bit 离线官安装 .net framework 3.5
2013-01-23 11:32 1899因为国内网络问题不可能在线安装成功,所以就有了这么多麻烦。 ...
相关推荐
其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样...
│ 3makefile运行流程分析并使用变量改写项目 │ 4makefile自动推导目标代码配置和伪目标clean清理 │ 5使用make编译动态链接库并编写测试项目 │ 6使用makefile 编译静态库并通过ifeq语句实现静态和动态切换 │ 7...
为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工 程完全自动编译,极大的提高了软件开发的效率。make是一个...
用shell脚本写成的gcc简单使用。 其中涉及到5个文件:(1)6.sh为由一个菜单选择各种功能——可以演示编译c程序的过程以及静态与动态函数库的生成及使用。(2)endian.c为一个简单的C函数用于识别机器的内存大小端。...
第1篇 Linux下C语言基础 第1章 Linux简介 1.1 GNU简介 1.2 Linux简介 1.2.1 Linux发展史 1.2.2 Linux发行版 1.2.3 Linux内核版本 1.2.4 Linux与UNIX的关系 1.2.5 Linux在服务器方面...第28章 shell脚本中的控制结构 844
他对软件项目的完美柏拉图式想法是由几个 shell 脚本、一个Dockerfile 、可能是一个用于运行各种任务的Makefile以及一个带有环境变量的秘密文件组成的。 他对 bash 了解很多。 我很确定他可以按字母顺序解释所有...
其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样...
跟我一起写makefile PDF文件,有目录,高清无水印,阅读体验佳。 跟我一起写 Makefile ...二、变量中的变量.........................................................................................
就像涡轮增压的Shell脚本一样,但不那么挑剔。 比makefile少烦人。 pypyr运行yaml中定义的管道。 管道几乎是您想要通过一系列步骤自动化的任何东西。 通过将命令,不同语言和应用程序的不同脚本组合到一个管道...
5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生...
这些makefile可以单独使用以完成常见的生物信息学操作,也可以在shell脚本中一起使用以组成管道。 该管道非常适合处理大量熟悉的同类,并且已在Simons Foundation的SPARK系列的462个家庭中进行了部署。从BAM文件到...
作为一种脚本语言,Tcl与其他的Unix shell语言,如Bourne Shell(sh)、C Shell(csh)、Korn Shell以及Perl类似。Shell程序可以让你执行其他的程序。它们提供了足够的可编程特性(变量、流程控制和过程),使你可以将现有...
Shell脚本,用于为“ BluePill” STM32F103C8开发板生成简单的Makefile项目。 以任何方便的方式运行脚本。 sh create_stm32f1_project 它将从STMicro CMSIS存储库中获取所有必需的文件,生成main.h / main.c源,...
为了提供更多的便利,我们提供了一个shell脚本,用于在名为build的目录中进行源代码外配置和构建spammpack。 ./build.sh 将创建一个新的目录build并编译该目录中的源。 该脚本支持以下环境变量,并将其传递给...
但是由于它使用bash脚本和Makefile,因此移植到或等应该相当简单。 目前,已在构建期间启用GO111MODULE=on和GOFLAGS=-mod=vendor环境变量来设置CI。 有关更多详细信息,请参见样本 。 它是如何工作的 在CI构建期间...
提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options()) 控制台初始化(为输出信息而先于PCI初始化,console_init()) 剖析器数据结构初始化(prof_buffer和prof_len变量) ...
idl代码与Matlab 下载和构建代码 在LAre2d目录中,有多个子目录和一个“ Makefile”,其中包含用于编译代码的指令。 许多人将习惯于手动编辑...COMPILER=intel行添加到您的Shell脚本初始化文件中(例如,在大多数现代
idl代码与Matlab 下载和构建代码 在LAre3d目录中,有多个子目录和一个“ Makefile”,其中包含用于编译代码的指令。 许多人将习惯于手动编辑...COMPILER=intel行添加到您的Shell脚本初始化文件中(例如,在大多数现代
这个仓库有一个Makefile和下载脚本来下载和安装k3s,而不是使用k3s提供的方法来卷曲下载shell脚本并将其以root身份传递到sh中。 它不像k3s安装脚本那样灵活,但是我不需要它。 使用以下命令开始安装k3s集群: make ...
本章主要介绍了Shell的基本概念、Shell脚本以及awk的相关知识。 第8章:进程管理。本章主要介绍了在Linux中的进程管理。其中包括了进程、进程数、进程的优先级、定时执行等。 第9章:C编译器—— gcc。本章主要介绍...