Linux Apps安装篇

SVN

1
2
3
4
5
6
7
8
9
10
11
yum -y install subversion
rpm -ql subversion # 查看svn安装位置
mkdir /var/svn/svnrepos
svnadmin create /var/svn/svnrepos/xxxx (xxxx为你预期的版本库名称, 可自定义)# 创建版本库
cd /var/svn/svnrepos/xxxx/conf # 修改配置

authz
hooks-env.tmpl
passwd
svnserve.conf
.swp

protobuf

github上有详细的安装说明: https://github.com/google/protobuf/blob/master/src/README.md

1.确保centos7上已经安装了下面的软件, 或者直接用yum进行更
autoconf/automake/libtool/curl(used to download gmock)/make/g++/unzip

2.下载源码包, 解压, 编译安装
地址: https://github.com/google/protobuf/releases, 选择Source code (tar.gz)下载

1
2
3
4
5
6
7
8
tar -zxvf protobuf-3.1.0.tar.gz -C /usr/local/
cd protobuf-3.1.0/
./autogen.sh # 如果使用的不是源码, 而是release版本 (已经包含gmock和configure脚本), 可以略过这一步
./configure --prefix=/usr/local/protobuf # 指定安装路径
make # 编译
make check # 测试, 这一步很耗时间
make install # 安装
ldconfig # refresh shared library cache.

3.设置一下环境变量 /etc/profile

1
2
3
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/protobuf/lib # (动态库搜索路径) 程序加载运行期间查找动态链接库时指定除了系统默认路径之外的其他路径
export PATH=$PATH:/usr/local/protobuf/bin
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/protobuf/lib # (静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径

4.查看版本
protoc –version

3 automake & autoconf

简介

下面是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤:

configure 检测你的安装平台的目标特征的, 比如它会检测你是不是有CC或GCC, 并不是需要CC或GCC, 它是个shell脚本, 一般用来生成Makefile, 为下一步的编译做准备, 你可以通过在 configure 后加上参数来对安装进行控制, 比如:
./configure –prefix=/usr
上面的意思是将该软件安装在/usr下面, 执行文件就会安装在/usr/bin(而不是默认的 /usr/local/bin), 资源文件就会安装在/usr/share(而不是默认的/usr/local/share)
同时一些软件的配置文件可以通过指定–sys-config=参数进行设定
还有诸如: –with/–enable/–without/–disable等等参数对编译加以控制, 你可以通过 ./configure –help 察看详细的说明帮助

make是用来编译的, 它从Makefile中读取指令, 然后编译(有些perl或python编写的软件需要调用perl或python来进行编译)
如果在make过程中出现error, 你就要记下错误代码(注意不仅仅是最后一行), 然后你可以向开发者提交bugreport(一般在INSTALL里有提交地址), 或者你的系统少了一些依赖库等, 这些需要自己仔细研究错误代码

make test/make check顾名思义, 这一步就是对上一步make的检查了, 要确保make是没有错误的, 也就是这一步的test check要全部是OK的,error 为0

sudo make install是用来安装的, 它也从Makefile中读取指令, 安装到指定的位置, 一般需要你有root权限(因为要向系统写入文件), 所以前面用了sudo

使用流程

1
2
3
4
5
6
7
8
autoscan -> aclocal -> autoconf -> autoheader -> automake --add-missing -> ./configure -> mkae -> ./helloworld  
source code [autoscan] configure.scan [edit] configure.ac [aclocal] -> aclocal.m4
configure.ac & aclocal.m4 [autoconf] -> configure
[autoheader] -> config.h.in
[edit] Makefile.am & configure.ac [automake] -> Makefile.in
Makefile.in [./configure] -> Makefile
make # 编译
./CMakeProject # output: Hello AutoMake

可以看到configure.ac内容是一些宏定义, 这些宏经autoconf处理后会变成检查系统特性 环境变量 软件必须的参数的shell脚本.

autoconf是用来生成自动配置软件源代码脚本(configure)的工具. configure脚本能独立于autoconf运行, 且在运行的过程中, 不需要用户的干预.
要生成configure文件, 你必须告诉autoconf如何找到你所用的宏. 方式是使用aclocal程序来生成你的aclocal.m4.
aclocal根据configure.ac文件的内容, 自动生成aclocal.m4文件. aclocal是一个perl 脚本程序, 它的定义是: “aclocal - create aclocal.m4 by scanning configure.ac”.
autoconf从configure.ac这个列举编译软件时所需要各种参数的模板文件中创建configure.
autoconf需要GNU m4宏处理器来处理aclocal.m4, 生成configure脚本.
m4是一个宏处理器. 将输入拷贝到输出, 同时将宏展开. 宏可以是内嵌的, 也可以是用户定义的. 除了可以展开宏, m4还有一些内建的函数, 用来引用文件, 执行命令, 整数运算, 文本操作, 循环等. m4既可以作为编译器的前端, 也可以单独作为一个宏处理器.

命令详解

1.autoscan

autoscan是用来扫描源代码目录生成configure.scan文件的. autoscan可以用目录名做为参数, 但如果你不使用参数的话, 那么autoscan将认为使用的是当前目录. autoscan将扫描你所指定目录中的源文件, 并创建configure.scan文件.

2.configure.scan

configure.scan包含了系统配置的基本选项, 里面都是一些宏定义, 需要将其改名为configure.ac.

3.aclocal

aclocal是一个perl脚本程序. aclocal根据configure.ac文件的内容, 自动生成aclocal.m4文件. aclocal的定义是:”aclocal - create aclocal.m4 by scanning configure.ac”.

4.autoconf

使用autoconf, 根据configure.ac和aclocal.m4来产生configure文件. configure是一个脚本, 它能设置源程序来适应各种不同的操作系统平台, 并且根据不同的系统来产生合适的Makefile, 从而可以使你的源代码能在不同的操作系统平台上被编译出来.

configure.ac文件的内容是一些宏, 这些宏经过autoconf处理后会变成检查系统特性 环境变量 软件必须的参数的shell脚本. configure.ac文件中的宏的顺序并没有规定, 但是你必须在所有宏的最前面和最后面分别加上AC_INIT宏和AC_OUTPUT宏.

在configure.ac中:

1
2
3
4
  AC_INIT(FILE)      # 这个宏用来检查源代码所在的路径.
  AM_INIT_AUTOMAKE(PACKAGE, VERSION) # 这个宏是必须的, 它描述了将要生成的软件包的名字及其版本号:PACKAGE是软件包的名字, VERSION是版本号. 当你使用make dist命令时, 它会给你生成一个类似helloworld-1.0.tar.gz的软件发行包, 其中就有对应的软件包的名字和版本号.
  AC_PROG_CC   # 这个宏将检查系统所用的C编译器.
  AC_OUTPUT(FILE)  # 这个宏是要输出的Makefile的名字.

5.Makefile.am

Makefile.am是用来生成Makefile.in的, 需要你手工书写. Makefile.am中定义了一些内容:

1
2
3
AUTOMAKE_OPTIONS  # 在执行automake时, 它会检查目录下是否存在标准GNU软件包中应具备的各种文件, 例如AUTHORS ChangeLog NEWS等文件. 将其设置成foreign时, automake会改用一般软件包的标准来检查.
bin_PROGRAMS   # 这个是指定所要产生的可执行文件的文件名. 如果你要产生多个可执行文件, 那么在各个名字间用空格隔开.
helloworld_SOURCES # 这个是指定产生"helloworld"时所需要的源代码. 如果它用到了多个源文件, 那么请使用空格符号将它们隔开. 比如需要helloworld.h, helloworld.c那么请写成helloworld_SOURCES= helloworld.h helloworld.c. 如果你在bin_PROGRAMS定义了多个可执行文件, 则对应每个可执行文件都要定义相对的filename_SOURCES.

6.automake

使用automake, 根据configure.ac和Makefile.am来产生Makefile.in.
–add-missing定义是”add missing standard files to package”, 它会让automake加入一个标准的软件包所必须的一些文件.

用automake产生出来的Makefile.in文件是符合GNU Makefile惯例的, 接下来只要执行configure这个shell脚本就可以产生合适的Makefile文件了.

7.Makefile
在符合GNU Makefiel惯例的Makefile中, 包含了一些基本的预先定义的操作:

1
2
3
4
5
6
make          # 根据Makefile编译源代码, 连接, 生成目标文件, 可执行文件.
make clean   # 清除上次的make命令所产生的object文件(后缀为".o"的文件)及可执行文件.
make install  # 将编译成功的可执行文件安装到系统目录中, 一般为/usr/local/bin目录.
make list   # 产生发布软件包文件(即distribution package). 这个命令会将可执行文件及相关文件打包成一个tar.gz压缩的文件用来作为发布软件的软件包. 它会在当前目录下生成一个名字类似"PACKAGE-VERSION.tar.gz"的文件. PACKAGE和VERSION, 是在configure.ac中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION).
make distcheck # 生成发布软件包并对其进行测试检查, 以确定发布包的正确性. 这个操作将自动把压缩包文件解开, 然后执行configure命令, 并且执行make, 来确认编译不出现错误, 最后提示你软件包已经准备好, 可以发布了.
make distclean # 类似make clean, 但同时也将configure生成的文件全部删除掉, 包括Makefile.