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

(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函数:

$(<function> <argment>)或者${<function> <argment>}

makefile系统函数:

$(subst <from>,<to>,<text>)字符串替换函数
$(patsubst <pattern>,<replacement>,<text>)模式字符串替换
函数
$(strip <string>)去空格
$(findstring <find>,<in>)查找string
$(filter <pattern>,... <text>)过滤字符串
$(sort <list>)排序
$(word <n>,<text>)取单词
$(wordlist <s>,<e>,<text>)取单词串
$(words <text>)单词数统计
$(firstword <text>)查找首单词
$(join <list1>,<list2>)合并字符串
--------------------------------
$(dir <names...>)文件名中取出目录部分
$(notdir <names...>)取文件名部分
$(suffix <names...>)取后缀扩展名
$(basename <names...>)取文件名前部分
--------------------------------
foreach函数:$(foreach <var>,<list>,<text>)函数返回值一次性赋值给变量组成新的字符串
if函数:$(if <condition>,<then-part>)
$(call <expression>,<parm1...>)

使用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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券