从 Makefile 安装包

Installing a package from Makefile

我是编写Makefile 的初学者。我正在编写一个用于构建我的第一个 linux 应用程序。

到目前为止,我已经写了以下内容。

REDHATOS      := $(shell command -v cat /etc/redhat-release 2> /dev/null)
DEBIANOS      := $(shell command -v cat /etc/debian_version 2> /dev/null)
SWIG          := $(shell command -v swig 2> /dev/null)

PRE_BUILD_VALIDATION:
ifndef SWIG
    @echo "swig not installed, trying to install it first ..."
ifdef DEBIANOS  
    @sudo apt-get install swig
else
    @sudo yum install swig
endif
endif

基本上我想检查系统中是否已经安装了SWIG(你可以忽略这个)。如果没有,它将首先安装。我想设计独立于平台的进程(Fedora 或Ubuntu)。

但是,当我在 Fedora 系统中 makeing 时,我遇到了以下错误。

swig not installed, trying to install it first ...
sudo: apt-get: command not found
Makefile:7: recipe for target 'PRE_BUILD_VALIDATION' failed
make: *** [PRE_BUILD_VALIDATION] Error 1

它实际上应该点击 yum install swig 命令,因为它是 Fedora 系统。我不知道我做错了什么。如果我在这里做一些愚蠢的事情,请帮助并原谅。初学者在这里!!!

谢谢!

嗯,你 运行宁 command -v,记录如下:

-v  print a description of COMMAND similar to the `type' builtin

如果您从命令行运行它:

$ command -v cat /etc/debian_version
/bin/cat

因此,这两个变量都包含字符串 /bin/cat,并且它们都不为空,因此您的 ifdef 始终为真。

可能您想取出 -v

你这里的错误是变量有错误的值。

最好使用 wildcard 检查文件是否存在:

REDHATOS      := $(wildcard /etc/redhat-release*)
DEBIANOS      := $(wildcard /etc/debian_version*)

免费小费::-)

ifneq($(DEBIANOS),)
 PKG_INSTALLER := apt-get
endif