我现在正在尝试为一个由几个子应用程序组成的github项目编写一个PKGBUILD.
所以基本上这个项目的CMake文件只是运行一个make来制作&&make安装子应用程序.
这些是我的构建和打包步骤:
build() {
cd "$srcdir/$_gitname"
[[ -d build ]] && rm -r build
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/od ..
}
package() {
cd "${_gitname}/build"
sudo make all
}
我的问题是现在一切都可以正常工作,除了:
- makepkg -i 在构建过程中从不要求 sudo 权限(因此我不得不在 make all 前面添加 sudo)
- 请求安装时,makepkg 无法识别软件包的大小。因此,运行 packman -R 软件包名称时,软件包也不会卸载
不过,我无法更改CMake文件,因为该项目不是我的,并且所有不同的子应用程序都属于一起,如果我尝试分别进行&&make安装它们,则会收到一堆错误,它们相互依赖。
包函数无法安装到根层次结构中。相反,makepkg 旨在安装在 fakeroot 下的 pkgdir 中,其中 pkgdir 复制了实际的根目录结构。参见 ArchWiki/创建包。
您可以通过向包函数中的 make 选项添加DESTDIR="$pkgdir/"
来执行此操作。
当在创建的软件包上调用 pacman 时,它会将文件复制到真正的根层次结构中。
作为示例
package()
{
cd "$pkgname"
DESTDIR="$pkgdir" cmake --install out
}
这会将东西安装到$pkgdir,然后打包到 zst 文件。