2016-04-05 10 views
0

私はいくつかのmakeをテストし、シェルの環境変数の問題はMakeファイルの中にはありません。セットアップに何が間違っているのだろうか。私は私のmac os、redhat、およびUbuntuでテストしました。彼らはすべて同じ行動をしています。私は誰もこれを助けることができるのだろうか。ここでなぜmakeは環境変数を受け取ることができないのですか?

GNU Make 4.1 

は私の最も簡単なメイクファイルです:

ifdef $(HOME) 
$(info $$HOME is $(HOME)) 
else 
$(info $$HOME is undefined) 
endif 

all : 
    echo do nothing 

ターミナルでmakeと入力すると、私はここでのエコーの$ HOME

/Users/myusername 

$HOME is undefined 
echo do nothing 
do nothing 

が定義され得ますメイクのマニュアルブックhttps://www.gnu.org/software/make/manual/html_node/Environment.html

makeの変数は、makeが実行される環境から来る可能性があります。 makeが起動するときに見えるすべての環境変数は、同じ名前と値を持つmake変数に変換されます。しかし、makefileやコマンド引数に明示的に代入すると、環境が上書きされます。

+0

実際、私は$ HOME/.bash_profileで定義した別の環境変数をテストしていました。私は輸出を忘れる。私が$ MYVARABLEをエコーし​​てもmakeの内部にはない変数は見えます。ここで私のダミーmakeファイルの環境変数をテストする際に、別の '$'をgivintでもう一度間違えました。ダンの答えをありがとう。 –

+0

ここでmake 3.79.1ドキュメントにリンクした理由はありますか?特にリンクは 'old-gnu' URLなので、あなたは特に** makeより新しいバージョンのmakeを使用していますか? (正確には14年半が新しい) –

+0

特に理由はありません。私はちょうどgoogleで検索し、それはGoogle検索の最初の項目です。 makeのほとんどのユーザーは専門家でなければならず、新しいマニュアルをそれ以上読んではいけません。したがって、古いバージョンが最も広報されます。 –

答えて

3

ifdefブロックでHOME変数の値を取得すべきではないと思います。 GNU makeはこれを評価するでしょう。

ifdef /your/home/directory 

これは明らかに変数として定義されていません。以下を試してください:

​​
+0

正しいですが、構文は 'ifdef VAR_NAME'では' ifdef VAR_VALUE'ではありません。詳細については、マニュアルの[条件の構文](http://www.gnu.org/software/make/manual/make.html#Conditional- Syntax)を参照してください。 –