2016-11-03 9 views
1

私はMakefileを書く初心者です。私は最初のLinuxアプリケーションを構築するためのものを書いています。Makefileからパッケージをインストールする

私は以下のように書いています。

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システムでmakeにいるとき、私は次のエラーに直面しています。

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 

それがFedoraシステムだように、それは実際にyum install swigコマンドを打つ必要があります。私は何が間違っているのか分かりません。私がここで愚かなことをしているなら、助けてください、許してください。初心者はここ!

ありがとうございます!

+0

'DNF swig' – Jakuje

答えて

2

さて、あなたはこのように文書化されcommand -vを、実行している:

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

コマンドラインから実行した場合:だから

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

、両方のこれらの変数は、文字列が含まれている/bin/catどちらも空ではないので、ifdefは常にtrueです。

おそらくを取り出したいと思っています。

+0

感謝をインストールし、ファイルの存在をチェックするために使用wildcard

良いです。これは完全に機能しました。 –

1

ここでのエラーは、変数に間違った値があることです。

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

無料ヒント::-)

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

ありがとうございます。あなたは私にそれをする別の方法を与えました。 –

関連する問題