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

rod*_*dee 5 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---------------
Run Code Online (Sandbox Code Playgroud)

我可以在我的系统中运行以下命令,最好在 make 日志中打印相同的命令,任何有助于改进上述代码并在日志中打印以下输出(如果安装了包)的帮助都是值得赞赏的。提前致谢!

$ dpkg-query -W -f='${Package} ${Status}\n' sudo
sudo install ok installed
Run Code Online (Sandbox Code Playgroud)

tet*_*ino 5

使用 dpkg 检查对于尝试在非 Debian 衍生发行版上安装软件包的人来说是不友好的。也许他们正在运行 CentOS、Fedora、Arch 或 Gentoo...

因此,这种情况下通常的解决方案是在用户路径中查找包的主要可执行文件。例如,使用 查找 sudo which sudo,或者在 bash 中查找 sudo type -P sudo。这并不能防止有人在他们的路径中调用完全不相关的程序sudo,但在某些时候,你确实必须允许人们搬起石头砸自己的脚。


Dav*_*ica 4

您需要检查系统上是否存在该软件包的特定所需组件。查看通过 makefile 检查程序是否存在,了解执行此操作的不同方法。某些发行版可能有可用的特定工具,但由于“包”的构成因发行版而异,因此我知道没有“包”的通用测试。