前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux下源码安装

linux下源码安装

作者头像
sofu456
发布2019-07-09 13:59:54
7K0
发布2019-07-09 13:59:54
举报
文章被收录于专栏:sofu456sofu456

 源码安装:配置(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的可执行文件

代码语言:javascript
复制
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变量定义:

代码语言:javascript
复制
'=':(直接赋值,只有变量引用则未被赋值)
':=':(选择有值的变量赋值)
'?=':(已被赋值的变量不赋值)
'+=':(追加赋值,**makefile变量值都是字符串**)
变量引用:$(变量)

makefile条件选择:

代码语言:javascript
复制
ifeq 'arg1' 'arg2'或ifeq ( arg1, arg2 )或ifeq "arg1""arg2"
ifneq 'arg1' 'arg2'或ifneq ( arg1, arg2 )或ifneq "arg1""arg2"
ifdef  variable-name

makefile函数:

代码语言:javascript
复制
$(<function> <argment>)或者${<function> <argment>}

makefile系统函数:

代码语言:javascript
复制
$(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检测到没有安装的应用:

代码语言:javascript
复制
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)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015年09月21日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档