程序包编译安装
*.src.rpm→安装后,使用rpmbuild命令制作成二进制格式的rpm 包,而后再安装;
源代码组织格式:
多文件:文件中的代码段之间,很有可能存在跨文件依赖关系;
各个语言的项目管理器:
C,C++:make;
Java:maven;
make执行过程:
make针对每一个源代码都有一个专用的配置文件,它会根据配置文件作出决定,比如在预处理阶段,决定调用那个预处理器如何预处理;在编译阶段决定调用哪个编译器如何执行编译,先编译哪个文件,后编译哪个文件;最后编译生成的文件要放到那些目录等;
这个配置文件就是makefile,因为不同用户的需求不同,所以决定了makefile不可能是事先存在的,需要根据需求而临时生成的,那么它是怎么生成的那:由Makefile.in生成;makefile.in就类似一个模板,用户选择好不同的参数之后根据模板而生成makefile,比如事先设置各种配置文件的安装路径等;那么问题来了:Makefile.in这个模板是怎么生成的那,它是由configure这个脚本生成的;configure脚本允许用户传递给它一些选项用来指明程序包的编译参数、启用特性、安装路径等;
大体过程:configure通过用户指定的选项然后结合Makefile.in模板来生成makefile文件;
编译安装三步骤:
./configure
通过选项传递参数,指定启用特性,安装路径;执行时会参考用户指定的参数以及Makefile.in模板生成makefile文件;
检各个启用的功能所依赖的外部环境;
make
根据makefile文件,构建应用程序;
make install:其实这一步就是把编译(构建)好的程序的文件放到相对应的目录下,使用cp命令也可以完成;
开发工具:
一般情况下源码包都会自带configure,但是也有的源码包不带,所以就需要我们自己生成它,如果手动的一步一步的编写这个就脚本无疑是很费时间的,所以就有了可以自动生成它的开发工具;
autoconf:生成configure脚本;
automake:生成Makefile.in文件;
因不同的需求而启动的功能有所不同,所以导致configure也是不同的,所以autoconf也是需要根据配置文件来生成configure脚本的;Makefile.in同理;
建议:安装前查看INSTALL、README说明文本;
开源代码获取途径:
官方自建站点
apache.org(ASF)
mariadb.org
…
代码托管
SourceForge
Github.com
code.google.com
编译C源代码
前提:提供开发工具和开发环境;
开发工具:gcc,make;
开发环境:开发库,头文件;
通过“包组”提供开发工具;
Centos 6 常用开发库:“Development Tools”,“Server Platform Development”;
Centos7 常用开发库:“Development Tools”;
第一步 ./configure
选项:指定安装位置,指定启用的特性;
--help:查看帮助;
--prefix=/PATH/TO/SOMEWHERE:指定默认安装目录;默认安装到/usr/local/
--sysconfdir=/PATH/TO/SOMEWHERE:指明配置文件安装的路径;
System Types:指明目标系统平台,可以实现交叉编译;
不同软件的源码包实现功能不同,所以选项也各有不同,根据情况随机应变;
Optional Features:可选特性;
可以启用或关闭特性,选项略;
Optional Packages:定义依赖到的程序包,跟依赖关系相关;
第二步 make
第三步 make install
安装后的配置:
导出二进制程序目录至环境变量PATH中
编辑文件:/etc/prefile.d/NAME.sh
添加export PATH=/PATH/TO/BIN:$PATH
导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
再让系统重新生成缓存:
ldconfig -[v]
导出头文件
基于符号链接的方式实现;
ln -s
导出man手册
编辑/etc/man_db.conf文件;
注:根据马哥视频做的学习笔记,如有错误,欢迎指正:侵删