正如前面日志中写到的,我们在编写.spec脚本的时候,应该尽量使用对应操作系统平台的标准宏命令。但有些时候,标准的宏中定义的写法未必可以满足我们的要求,此时就需要给标准的宏添加参数。下面以maildrop这个套件为例说明。
一、举例
maildrop是一个邮件投递代理(MDA)软件,其可搭配postfix实现过滤和强大的功能。maildrop的邮箱大小限额是用off_t来表示,而off_t在32平台上是32位有符号整数。所以最大只能为2^31次方。也就是最大2GB。如果要突破这个限制,需要在编译的时候增加下述的环境变量:
二、获取可用的参数
这里,我们先假设不知道在编译的时候可以使用那些参数。那您可以这样获得:
# ./configure –help
最后可以看到:
CC C compiler command
CFLAGS C compiler flags
LDFLAGS linker flags, e.g. -L
nonstandard directory
headers in a nonstandard directory
CPP C preprocessor
CXX C++ compiler command
CXXFLAGS C++ compiler flags
CXXCPP C++ preprocessor
F77 Fortran 77 compiler command
FFLAGS Fortran 77 compiler flags
三、修改.spec文件
原来的maildrop.spec文件内容如下:
%configure –with-devel –enable-userdb –enable-maildirquota \
–enable-syslog=1 –with-trashquota \
–enable-restrict-trusted=0 \
–enable-sendmail=/usr/sbin/sendmail
可以看到,它使用的就是标准的%configure宏。
先看看标准宏的定义:
CFLAGS=”${CFLAGS:-%optflags}” ; export CFLAGS ; \
CXXFLAGS=”${CXXFLAGS:-%optflags}” ; export CXXFLAGS ; \
FFLAGS=”${FFLAGS:-%optflags}” ; export FFLAGS ; \
./configure –host=%{_host} –build=%{_build} \\\
–target=%{_target_platform} \\\
–program-prefix=%{?_program_prefix} \\\
–prefix=%{_prefix} \\\
–exec-prefix=%{_exec_prefix} \\\
–bindir=%{_bindir} \\\
–sbindir=%{_sbindir} \\\
–sysconfdir=%{_sysconfdir} \\\
–datadir=%{_datadir} \\\
–includedir=%{_includedir} \\\
–libdir=%{_libdir} \\\
–libexecdir=%{_libexecdir} \\\
–localstatedir=%{_localstatedir} \\\
–sharedstatedir=%{_sharedstatedir} \\\
–mandir=%{_mandir} \\\
–infodir=%{_infodir}
标准宏中,是没有考虑到CPPFLAGS变量的。所以,修改的方法有两种:一是修改上面的标准宏,但这样会对其他不需要使用到该变量的rpm有影响;二是在.spec文件中使用。
修改maildrop.spec内容如下:
CPPFLAGS=”${CPPFLAGS} -D_FILE_OFFSET_BITS=64″;export CPPFLAGS;
%configure –with-devel –enable-userdb –enable-maildirquota \
–enable-syslog=1 –with-trashquota \
–enable-restrict-trusted=0 \
–enable-sendmail=/usr/sbin/sendmail
也就是说,把CPPFLAGS的定义放在%configure前面,并用export输出到其他子程序中。
※注意:由于一些不明的原因,对变量的定义时,建议把export单独拿出来,这只是习惯而已。
四、编译
经过上面的修改,在编译的时候就可以自动引用CPPFLAGS环境变量了:
输出:
+ CPPFLAGS=-D_FILE_OFFSET_BITS=64
+ export CPPFLAGS
+ CFLAGS=’-O2 -g -pipe -m32 -march=i386 -mtune=pentium4′
+ export CFLAGS
+ CXXFLAGS=’-O2 -g -pipe -m32 -march=i386 -mtune=pentium4′
……
编译的时候,使用Ctrl+S可以暂停屏幕输出,方便查看设置是否正确。Ctrl+Q继续。
※2007-11-24 修改一处错误
原写为:
改为:
意思是,在加入新变量定义的同时,把原默认定义也一同继承过来。否则,会丢失原来默认定义的设置,造成严重的问题。对于其他的环境变量,建议也使用相同的做法。(除非你要摒弃原默认的所有定义)
使用Mock 实现跨平台跨发行版编译RPM
[转]rpm命令选项中文说明
创建VPS OS模板
RDAC的spec生成rpm脚本
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/113022.html