1

我现在正在尝试为由几个子应用程序组成的 github 项目为 AUR 编写 PKGBUILD。
所以基本上这个项目的 CMake 文件只是运行一个 make 来 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 packagename 时该包也不会卸载

我无法更改 CMake 文件,因为该项目不是我的,并且所有不同的子应用程序都属于一起,如果我尝试 make && make 分别安装它们,我会得到一堆错误,它们相互依赖。

4

2 回答 2

0

包功能无法安装到根层次结构中。相反,makepkg 旨在安装到 fakeroot 下的 pkgdir 中,其中 pkgdir 复制了实际的根目录结构。请参阅ArchWiki/创建包

您可以通过DESTDIR="$pkgdir/"在包函数中添加 make 选项来做到这一点。

当在创建的包上调用 pacman 时,它会将文件复制到真正的根层次结构中。

于 2016-02-19T02:47:14.770 回答
0

作为一个例子

package()
{
    cd "$pkgname"
    DESTDIR="$pkgdir" cmake --install out 
} 

这会将东西安装到 $pkgdir,然后打包到 zst 文件。

于 2021-08-20T05:29:55.980 回答