linux - 在 Makefile 中,如何验证是否安装了所需的 Linux 软件包

标签 linux gnu-make

以下代码适用于 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/

相关文章:

linux - 如何在 linux 上查找物理接口(interface)(没有网桥、别名、vlan ..)

Python CronTab IOError

linux - haproxy acl中的base/uri/path/etc有什么区别?

c - GNU Make 忽略除第一个之外的所有规则

makefile - GNU Make 可以为配方回显行添加前缀吗?

Makefile 模式规则要么忽略虚假规则,要么自发删除输出文件

c++ - 在信号处理程序中使用长数据。

linux - 如何在linux中自动启动后运行可执行文件

gnu-make - 使用 gnu make 中的一个命令从多个文件制作多个文件

makefile - Makefile中的可变目标