以下代码适用于 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
最佳答案
使用 dpkg 检查对于试图在非 Debian 衍生发行版上安装您的软件包的人来说是不友好的。也许他们正在运行 CentOS、Fedora、Arch 或 Gentoo...
所以在这种情况下通常的解决方案是在用户路径中查找包的主要可执行文件。例如,使用 which sudo
查找 sudo,或者在 bash 中,type -P sudo
。这并不能防止有人在他们的路径中有一个完全不相关的名为 sudo
的程序,但在某些时候,你必须允许人们搬起石头砸自己的脚。
关于linux - 在 Makefile 中,如何验证是否安装了所需的 Linux 软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24315419/