2016-05-07 9 views
1

私はMakefileを書いており、HOSTNAME環境変数にアクセスする必要があります。 環境変数はありません。ここでのMakefileです:gmake環境変数がありません

all: 
    echo $(HOSTNAME) "b" 

出力は次のようになります。私は、VM内のUbuntu 14.04上で実行しています

echo "b" 
b 

。 gmakeのバージョン:

make -v 
GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for x86_64-pc-linux-gnu 

そして、はい、HOSTNAME環境変数が設定されている:

/tmp$ echo $HOSTNAME 
ubuntu 
/tmp$ 

このMakefileはcygwinの中で動作します。

これはなぜ機能していないのですか?

答えて

0

HOSTNAMEはBashによって設定されますが、Makeがシェルを実行するときはshが呼び出されます。これがシステム上のBashへのシンボリックリンクであっても、POSIXモードで動作し、多くのBash固有の動作を無効にします。

回避方法0; HOSTNAMEをエクスポートしてBashで常にmakeと呼び出してください。

alias make='export HOSTNAME; make' 

回避方法1;明示的にshの代わりにBashを使用してください。

SHELL=/bin/bash 
HOSTNAME=$(shell echo "$$HOSTNAME") 

回避方法2; Bashを明示的に呼び出します。

HOSTNAME=$(shell bash -c 'echo $$HOSTNAME') 

回避方法3;外部コマンドを実行します。

HOSTNAME=$(shell uname -n) 

これらのうち、最後のものはおそらく最も不明瞭で最も効率的です。

関連する問題