源码安装:配置(configure)、编译(make)、安装(make install),所有操作中间错误可以忽略,最后段末尾统一报错。
####1.配置
configure:生成Makefile的shell脚本
文件结构如下:
<文件夹>
|-configure.in
|-Makefile.am
|-acconfig.h
|-<源码文件>
|-tt.c
|-qq.c
|-qq.h
|-Makefile.am
其中configure.in作为./configure的配置输入;makefile.am通过automake生成makefile.in再由./configure生成makefile;acconfig.h由autoheader生成config.h.in再由./configure生成config.h
configure.h使用autoconf和automake命令的shell脚本,可以通过autoscan自动生成或手写
acconfig.h包含了configure.in中未定义的宏
autoscan–>autoheader–>aclocal–>automake|autoconf
(GNU m4宏处理器处理*.m4宏文件)
####2.编译
gcc找不到头文件: sudo find /(目录) -name 文件
makefile的一般格式:目标:依赖 命令
例如:a.c,b.c,main.c三个源文件,最终要编译成一个名为main的可执行文件
main : a.o b.o main.o
gcc a.o b.o main.o -o main
main.o : main.c
gcc -c main.c
b.o : b.c
gcc -c b.c
a.o : a.c
gcc -c a.c
#用".PHONY {目标名}"显式定义一个伪目标(可以隐式定义)
# 用"make {目标名}"执行该伪目标
.PHONY : clean
clean :
@rm -f main *.o
@echo 'clean'
makefile变量定义:
'=':(直接赋值,只有变量引用则未被赋值)
':=':(选择有值的变量赋值)
'?=':(已被赋值的变量不赋值)
'+=':(追加赋值,**makefile变量值都是字符串**)
变量引用:$(变量)
makefile条件选择:
ifeq 'arg1' 'arg2'或ifeq ( arg1, arg2 )或ifeq "arg1""arg2"
ifneq 'arg1' 'arg2'或ifneq ( arg1, arg2 )或ifneq "arg1""arg2"
ifdef variable-name
makefile函数:
$( )或者${ }
makefile系统函数:
$(subst ,,)字符串替换函数
$(patsubst ,,)模式字符串替换
函数
$(strip )去空格
$(findstring ,)查找string
$(filter ,... )过滤字符串
$(sort )排序
$(word ,)取单词
$(wordlist ,,)取单词串
$(words )单词数统计
$(firstword )查找首单词
$(join ,)合并字符串
--------------------------------
$(dir )文件名中取出目录部分
$(notdir )取文件名部分
$(suffix )取后缀扩展名
$(basename )取文件名前部分
--------------------------------
foreach函数:$(foreach ,,)函数返回值一次性赋值给变量组成新的字符串
if函数:$(if ,)
$(call ,)
使用CMAKE生成makefile:
http://digdeeply.org/archives/0421949.html
####3.安装
生成的可执行文件安装,用make install,安装文件到usr/bin下
(卸载使用make uninstall,清理make产生的缓存文件使用make clean)
####4.软件包管理工具
linux分为桌面系统领域和服务器系统领域,服务器系统如:rethat、suse、gentoo、arch、fedora、国产中标麒麟;桌面系统如:centos、ubuntu
linux软件包分为两大阵营:RPM和DPKG,与bin安装和源码安装相比,管理包工具使用数据库方式管理软件包和包的依赖项,安装路径系统默认
RPM(rpm包文件,yum自动解决依赖关系,rpm安装需要解决依赖关系)
DPKG(debian包文件,遵循GNU规范,apt自动解决依赖关系)
checkinstall(生成RPM包或DEB包)
alien(rpm到debian包装换工具)
打包RPM:
http://blog.csdn.net/king_on/article/details/7169384
####5.安装包依赖关系
linux安装通常都会遇到安装包依赖导致安装失败,如configure编译时需要其他SDK的支持,check检查各模块是否安装,如下运行./configure检测到没有安装的应用:
checking for g++... no
checking for c++... no
checking for gpp... no
checking for aCC... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl... no
checking for FCC... no
checking for KCC... no
checking for RCC... no
checking for xlC_r... no
checking for xlC... no
####6.环境变量
全局环境变量:
1.etc/profile配置文件(export导出全局变量)
执行source etc/profile立即生效
2.etc/bashrc
3.home/*(用户)/bash_profile
本地环境变量(shell脚本范围):
env(显示所有)、echo $变量、set(显示本地定义)、export新增
参考:
http://blog.163.com/niwei_258/blog/static/1062848820101022105356248/ (configure)