以下代码适用于ptxdist Makefile,但是想知道是否有更好的解决方案来检查是否在继续构建之前安装了所有必需的软件包?
ENV_VERIFICATION:
@echo ------------START ENV VERIFICATION---------------
if ! dpkg -s sudo | grep Status | grep -q installed; then \
echo ERROR: sudo package not installed!; \
exit 1; \
fi
if ! dpkg -s scons | grep Status | grep -q installed; then \
echo scons package not installed!; \
exit 1; \
fi
@echo ------------END ENV VERIFICATION---------------
我可以在我的系统中运行下面的命令,很高兴在make日志中打印相同,任何帮助改进上面的代码和打印下面的输出(如果包已安装)到日志表示赞赏。提前谢谢!
$ dpkg-query -W -f='${Package} ${Status}\n' sudo
sudo install ok installed
答案 0 :(得分:3)
使用dpkg进行检查对于尝试在不是Debian衍生版本的发行版上安装软件包的人来说是不友好的。也许他们正在运行CentOS,Fedora,Arch或Gentoo ......
因此,在这种情况下,通常的解决方案是在用户的路径中查找包的主要可执行文件。例如,使用which sudo
或bash type -P sudo
查找sudo。这并不能防止在他们的路径上有一个名为sudo
的完全不相关的程序的人,但在某些时候,你必须允许人们用脚射击自己。
答案 1 :(得分:2)
您需要检查系统上是否存在该软件包的特定所需组件。查看Check if a program exists from a makefile了解不同的方法。某些发行版可能有特定的工具可用,但由于什么构成了一个'包'从发行版到发行版各不相同,我知道没有对包装进行通用测试。