spec是什么类型的文件?

spec是什么类型的文件?,第1张

投机说明书 

(尤指地产开发中) 投机性建房的。

spec文件解读:

一、编写spec脚本

由前面的日志了解到,生成rpm除了源码外,最重要的就是懂得编写.spec脚本。rpm建包的原理其实并不复杂,可以理解为按照标准的格中岁带式整理一些信息,包括:软件基础信息,以及安装、卸载前后执行的脚本,对源码包解压、打补丁、编译,安装路径和文件等。

实际过程中,最关键的地方,是要清楚虚拟路径的位置,以及宏的定义。

二、关键字

spec脚本包括很多关键字,主要有:

引用

Name: 软件包的名称,后面可使用%{name}的方式引用

Summary: 软件包的内容概要

Version: 软件的实际版卖芦本号,例如:1.0.1等,后面可使用%{version}引用

Release: 发布序列号,例如:1linuxing等,标明第几次打包,后面可使用%{release}引用

Group: 软件分组,建议使用标准分组

License: 软件授权方式,通常就是GPL

Source: 源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用

BuildRoot: 这个是安装或编译时使用的“虚拟目录”,考虑到多用户的环境,一般定义为:

%{_tmppath}/%{name}-%{version}-%{release}-root

%{_tmppath}/%{name}-%{version}-%{release}-buildroot-%(%{__id_u} -n}

该参数雀仿非常重要,因为在生成rpm的过程中,执行make install时就会把软件安装到上述的路径中,在打包的时候,同样依赖“虚拟目录”为“根目录”进行 *** 作。

公司开发的SDK,是集成了各个平台的商品,包括购买、分享、提现等功能,为了加快进度,我是使用了一些第三方。但是有些需求,比如分享到微信朋友圈或者还有,必须用到微信的SDK。考虑到后期的维护成本和集成,笔者采用了cocoapods管理第三方库。

笔者有片文章专门介绍SDK的开发步骤的,大家可以参考,我这里就直接进入主题了。

首先,你创建一个静态的framework工程MyTestSDK,把这个工程集成cocpapods,至于如何集成cocpapods,网上有教程,自己搜索。这个时候把你项目中所用的第三方库添加到Podfile文件中,然后 pod install。这个时候你command + B 编译运行,如果你的第三方库中还有Bundle资源,那么编译后,第三方库的bundle资源会被编译,一起放到Products文件下的framework文件中,右键Show in Finder就会看到。如下图所示的MBProgressHUD文件夹,里面都是MBProgressHUD第三方的资源文件。

然后把你的项目放入SDK工程中,编译运行一下,看看有没有错误。之所以先把SDK工程选用cocoapods管理,就是怕你的项目放入SDK中运行报错。没有任何问题,直接编译即可。

由于SDK中的第三方是通过cocoapods管理的,所以接入者的项目也要用cocoapods管理。

1:把SDK工程中,Products文件夹下的framework文件copy到项目中,最好项目中建立一个文件夹,专门放SDK和bundle。我是放到了一个文件夹中,察芦方便分类寻找。如下图所示:

2:打开终端,cd到SDK所在的文件夹下,执行如下命令,回车,创建spec文件。

其中,MyTestSDK是你的SDK名称。

创建出来的spec文件,是个很长的文件,但是大部分都是注释的,我这里只提取了有用的信息展示出来:

然后把spec中依赖的第三方库,逐个加入到项目中的Podfie文件中。然后 终端打开,cd到自己的项目中,pod install即可。

本人亲自测试过的,No Problem。当初感觉SDK如果依赖了第三方库,接入的项目中也有同样的第三方贺弯库,会不会冲突啊,感觉好难搞啊。事实证明,通过spec进行依赖,可以很好的解决这个问题,也就没有那么麻烦了。

首次开发SDK还是遇到了很多问题,运行出现很多bug,但是最后还是一一解决了,就是没有记录下bug和解决发的方法。

1;path路径不对,就会报错 ,如下

是因为我把路径写成了:

其实正确的写法是:把“/败拍带”放在前面

2:SDK中有第三方,但是项目中的Podfile里面没有这个第三方,报错如下所示:

解决办法是就是在项目中的 Podfile里面加入缺失的第三方库,重新 pod install。

首先安装打包软件

1.yum install rpmbuild -y

2.yum install rpmdevtools -y

生成打包路径

1.使用rpmdev-setuptree ,会自动在用户家目录生成一个rpmbuild的文件夹,弯铅作为工作路径

2.cd rpmbuild/SPECS路径,创建my.spec文件,仅仅需要以下内容

################my.spec##############

Name: shepherd

Version:1.0

Release:1

Summary:luckykris

License: [email protected]

Group: github

%description

%prep #打包前所要做的 *** 作

%files #你想打包的可执行文件,未来安装到的路径

%defattr(0755,root,root,-) #你想打包的可执行文件的默认权限

/usr/local/bin/shepherd#你想打包的可执行文件,未来安装到的路径

%doc

%require #包依赖 ,值得一提的是,你打包的所有文件中如果有可执行的二进制文件,安装的默认会用 ldd命令去查看 ,是否有not found的动态链接库,如果有的话,会报出依赖关系缺失异常,阻止你安装rpm包

%pre #安装包前所需要做的 *** 作

%post #安装包后所要做的 *** 作

%changelog

###################################

3.执行打包命令rpmbuild -ba shepherd.spec

首次执行之后会报错:

[root@dev-ansible-server SPECS]# rpmbuild -ba shepherd.spec

Processing files: shepherd-1.0-2.x86_64

error: File not found: /root/rpmbuild/BUILDROOT/shepherd-1.0-2.x86_64/usr/local/bin/shepherd

RPM build errors:

File not found: /root/rpmbuild/BUILDROOT/shepherd-1.0-2.x86_64/usr/local/bin/shepherd

看到没有找到路径的报错,然后你需要建立这个路径:

mkdir -p /兄闹雹root/rpmbuild/BUILDROOT/shepherd-1.0-2.x86_64/usr/local/bin/

4.报错之后,你需要做的就是把你编译好的自己的程序的路径,复制到步骤3中报错的路径中。

也就是放在这个路径File not found: /root/rpmbuild/BUILDROOT/shepherd-1.0-2.x86_64/usr/local/bin/shepherd

5.放到规定路径后再次执行,就会成功打成rpm包。rpm包会放在rpmbuild/RPMS/x86_64这个路羡帆径下。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12284436.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存