自动安装 dpkg-checkbuilddeps 检测到的未满足的构建依赖项

自动安装 dpkg-checkbuilddeps 检测到的未满足的构建依赖项

是否有一个命令dpkg-checkbuilddeps可以安装列出的所有未满足的构建依赖项?

我尝试sed输出并将其提供给apt-get install,但它看起来很老套,并且由于某种原因在某些环境中不起作用。

sudo apt-get install --yes $(dpkg-checkbuilddeps | sed 's/([^)]*)//g' | sed 's/dpkg-checkbuilddeps:\serror:\sUnmet build dependencies://g')

有没有更好的办法?

答案1

我使用包装mk-build-deps中的devscripts(您还需要equivs)。

mk-build-deps

将根据debian/control控制文件中的所有构建依赖项构建一个包;然后可以使用安装该包apt,这也将安装所有缺少的依赖项。

这种方法的优点是,卸载依赖包后,一旦完成它,还将识别任何也可以卸载的构建依赖项。

为了减少手动步骤,可以使用以下命令:

mk-build-deps --install --root-cmd sudo --remove

最终结果是安装了所有构建依赖项,但未安装新生成的构建依赖项包本身:它已安装 ( --install) 及其所有依赖项,然后删除 ( --remove),但依赖项保留在原处。

答案2

请尝试以下操作:

dpkg-checkbuilddeps 2>&1 | sed 's/dpkg-checkbuilddeps:\serror:\sUnmet build dependencies: //g' | sed 's/[\(][^)]*[\)] //g'

首先,dpkg-checkbuilddeps将错误打印到stderrnot stdout。所以需要重定向到stdout使用管道。

这是如何重定向stderrstdout在 Bash 中

([^)]*)在以下位置使用了正则表达式:

sed 's/([^)]*)//g'

但应该是:

sed 's/[\(][^)]*[\)]//g'

参考:使用 sed 删除括号之间的字符串

答案3

结合前面提到的两种方法对我有用:

sudo apt-get install \
    --yes $(dpkg-checkbuilddeps 2>&1 | sed -e 's/dpkg-checkbuilddeps:\serror:\sUnmet build dependencies: //g' -e  's/[\(][^)]*[\)] //g')

相关内容