linux下源码安装

 源码安装:配置(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
linux下源码安装_第1张图片
(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)

你可能感兴趣的:(开发随笔,问题杂记)