我正在编写一个脚本来构建 Debian 格式的 git 包 ( .deb
)。该软件包需要以下 debian 软件包:
cmake、libturbojpeg0-dev、libjpeg62-turbo-dev、libglx-dev、opencl-headers、libgl-dev、libegl-dev、libx11-dev、libxtst-dev、libglu1-mesa-dev、libxcb-keysyms1-dev、libxcb- glx0-dev 和 libx11-xcb-dev
所以我正在使用这个:
for file in cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev; do apt -y install $file;done
我的问题是,如何检查软件包是否已安装,如果未安装则安装?像这样的东西
dpkg -l packagename
如果已安装,则转到下一步,如果未安装,则使用apt -y install
。谢谢
答案1
mk-build-deps
您应该在包的控制文件中列出构建依赖项并使用(或任何包解析构建工具),而不是编写自己的脚本来执行此操作例如 pbuilder
,sbuild
ETC。)。看自动安装 dpkg-checkbuilddeps 检测到的未满足的构建依赖项了解详情。
如果您不想这样做,请描述所需的状态并让我们apt
处理这些事情:
sudo apt-get install --no-install-recommends cmake libturbojpeg0-dev libjpeg62-turbo-dev libglx-dev opencl-headers libgl-dev libegl-dev libx11-dev libxtst-dev libglu1-mesa-dev libxcb-keysyms1-dev libxcb-glx0-dev libx11-xcb-dev
apt
不会重新安装已安装的软件包,但它将升级系统上配置的存储库中具有较新候选版本的任何软件包(可以使用该选项禁用此--no-upgrade
功能)。
如果你真的想要编写自己的脚本,您可以dpkg -l
为每个包运行,并过滤^ii
- 需要安装不匹配的包:
for package in …; do
if ! dpkg -l "$package" | grep -q ^ii; then
sudo apt-get install --no-install-recommends "$package"
fi
done
(--no-install-recommends
跳过安装弱依赖项,这正是您想要的构建依赖项。)