构建rpm包填坑笔记
安装fcitx的依赖包
sudo yum install dnf-utils
sudo yum-builddep fcitx
安装make
CMake Error: CMake was unable to find a build program corresponding to “Unix Makefiles”. CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
– Configuring incomplete, errors occurred!
See also “/home/dml/dml/repo/mbedtls/CMakeFiles/CMakeOutput.log”.
遇到上述报错,可能是你没有安装make.
sudo yum install make
C编译器报错
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- broken
The C compiler "/usr/bin/cc" is not able to compile a simple test program.
在cmake中指定编译器
%build
mkdir -p build
pushd build
cmake .. -DCMAKE_FORCE_C_COMPILER=gcc -DCMAKE_FORCE_CXX_COMPILER=g++ -DCMAKE_INSTALL_PREFIX=/usr
make VERBOSE=1 %{?_smp_mflags}
查看spec文件中各种宏的实际值
打包相关的配置保存在宏文件 (macrofiles) 中,默认使用 $HOME/rpmbuild 目录,用户配置文件保存在 $HOME/.rpmmacros;而制作包时的操作实际都在 topdir 指定的目录下,可以通过如下方式查看。
rpmbuild --showrc
--- 查看所有的配置文件顺序
$ rpmbuild --showrc | grep macros
--- 确认上述的根工作目录,两种方式相同
$ rpmbuild --showrc | grep ': _topdir'
$ rpm --eval '%_topdir'
--- 设置topdir变量,然后再次验证下,确认已经修改为目标目录
$ echo "%_topdir %{getenv:HOME}/rpm-maker" > ~/.rpmmacros
$ rpm --eval '%_topdir'
--- 也可以在制作rpm包时通过--define指定
$ rpmbuild --define '_topdir rpm-maker' -ba package.spec
spec文档中常用的几个宏(变量)
RPM_BUILD_DIR: /usr/src/redhat/BUILD
RPM_BUILD_ROOT: /usr/src/redhat/BUILDROOT
%{_sysconfdir}: /etc
%{_sbindir}: /usr/sbin
%{_bindir}: /usr/bin
%{_datadir}: /usr/share
%{_mandir}: /usr/share/man
%{_libdir}: /usr/lib64
%{_prefix}: /usr
%{_localstatedir}: /usr/var
%{_topdir} %{getenv:HOME}/rpmbuild
%{_builddir} %{_topdir}/BUILD
%{_rpmdir} %{_topdir}/RPMS
%{_sourcedir} %{_topdir}/SOURCES
%{_specdir} %{_topdir}/SPECS
%{_srcrpmdir} %{_topdir}/SRPMS
%{_buildrootdir} %{_topdir}/BUILDROOT
构建rpm包
rpmbuild [options] [spec文档|tarball包|源码包]
安装卸载本地rpm包
sudo rpm -i * --replacefiles (有冲突时)
rpm -q -a | grep fcix (查询已安装的包)
rpm -e fcitx-* --nodeps (有依赖时,强制删除)