2016-11-03 2 views
1

Je suis un débutant dans l'écriture de Makefile. J'écris un pour construire ma première application Linux.Installation d'un package à partir de Makefile

J'ai écrit ce qui suit jusqu'à maintenant.

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 

Fondamentalement, je veux vérifier si SWIG (Vous pouvez ignorer ce fait) est déjà installé dans le système. Sinon, il sera installé en premier. Je veux concevoir le processus indépendant de la plate-forme (Fedora ou Ubuntu). Mais, quand je suis make dans un système Fedora, je suis confronté à une erreur de suivi.

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 

Il devrait en fait frapper la commande yum install swig que son système Fedora. Je ne peux pas comprendre ce que je fais mal. S'il vous plaît aidez et s'il vous plaît pardonnez si je fais quelque chose de stupide ici. Débutant ici !!!

Merci!

+0

'DNF swig' install – Jakuje

Répondre

2

Eh bien, vous utilisez command -v, qui est documenté comme ceci:

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

Si vous exécutez depuis la ligne de commande:

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

Ainsi, à la fois ces variables contiennent la chaîne /bin/cat , et aucun d'entre eux n'est vide alors votre ifdef est toujours vrai.

Probablement vous voulez supprimer le -v.

+0

Merci. Cela a fonctionné parfaitement. –

1

Votre erreur ici est que les variables ont des valeurs erronées.

Une meilleure utilisation wildcard pour vérifier la présence du fichier:

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

pointe gratuit: :-)

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

Merci. Tu m'as donné une autre façon de le faire. –