关键字
- $0 这个程式的执行名字
- $n 这个程式的第n个参数值,n=1..9
- $* 这个程式的所有参数,此选项参数可超过9个。
- $# 这个程式的参数个数
- $$ 这个程式的PID(脚本运行的当前进程ID号)
- $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
- $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
- $- 显示shell使用的当前选项,与set命令功能相同
- $@ 跟$*类似,但是可以当作数组用
- ${NAME:0:1} 取NAME变量的第一字符
- ${var#*字符串} 从左查删左
- ${var##*字符串} 从右查删左
- ${var%字符串*} 从右查删右
- ${var%%字符串*} 从左查删右
- local 函数本地变量
Autotools
- 包含 autoscan aclocal autoconf autoheader automake
生成 configura
- 安装 automake autoconf m4
- autoscan 扫描目录 生成configure.scan
- mv configure.scan configure.ac
- configure.ac AC_INIT(name,version,联系方式)
- configure.ac 添加AM_INIT_AUTOMAKE在AC_INIT下面
- configure.ac AC_OUTPUT(Makefile..) 指定configura产生的文件,可以给每个文件夹一个makefile
- configure.ac AC_PREREQ autoconf版本 不修改
- configure.ac AC_CONFIG_SRCDIR 源文件 不修改
- configure.ac AC_CONFIG_HEADER 生成config.h 不修改
- configure.ac AC_PROG_CC 默认编译器
- configure.ac AC_PROG_RANLIB 生成静态库
- configure.ac AC_PROG_LIBTOOL 生成动态库
- configure.ac AC_CONFIG_FILES(Makefile,src/Makefile) 生成Makefile文件
- configure.ac 设定configure要产生的文件
- aclocal 扫描configure.ac 生成aclocal.m4 处理本地宏
- autoconf 生成configure脚本
- autoheader 生成config.h.in文件
- glibtoolize –automake –copy –debug –force 动态库需要
- 生成Makefile.am
- touch README NEWS AUTHORS ChangeLog automake需要
- automake –add-missing 或 -a
- autoreconf -f -i -Wall,no-obsolete
Makefile.am
- AUTOMAKE_OPTIONS=no-dependencies 许可 必须
- bin_PROGRAMS=xx xx.a yy 目标
- name_SOURCES=xx.c xx.cpp xx.h name必须跟AC_INIT一样
- name_LDADD=xx/xx/xx.a 依赖库
- name_LDFLAGS=-Lxxxx 依赖库文件夹
- LIBS=-lxxx 依赖的内部库(其实是分文件夹的源文件单独有makefile)
- AM_CPPFLAGS 头文件目录
- SUBDIRS 需要的子文件夹
- DIST_SUBDIRS
- [lib_][noinst_]LTLIBRARIES 生成libtool内部库la
- [lib_][noinst_]LIBRARIES 生成静态库
- [lib_][noinst_]HEADERS 头文件
- libxxx_a_SOURCES 静态库源文件
- libxxx_la_SOURCES 内部libtool依赖源文件
- ACLOCAL_AMFLAGS
- AM_CFLAGS
- EXTRA_DIST
- $(datadir) $(libdir) $(docdir) $(pkgdocdir) 安装目录
- $(top_srcdir) configure 所在目录