2016-08-04 3 views
2

特定のセクションについて私のMakefileの変数拡張を "無効にする"ことはできますか?ここでMakefile環境変数のドル

は私がいる問題の例です:

print_command: 
    @echo '$(COMMAND)' 

そして、ここでは、私が取得していた出力です:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is HELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to HELL 

そして、何私が取得したいと思います:

$ export COMMAND='My favourite shell is $SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $SHELL' 
Welcome to $SHELL 

ダブルドルを使わないでこれを行うことは可能ですか:

$ export COMMAND='My favourite shell is $$SHELL' 
$ make print_command 
My favourite shell is $SHELL 
$ make print_command COMMAND='Welcome to $$SHELL' 
Welcome to $SHELL 

私は変数COMMANDの正確な内容をmakeにマングリングさせずに転送することを考えています。

答えて

2

$$ダブルドルを追加してください。

print_command: 
       @echo "$$COMMAND" 

と同様に、

$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is $SHELL 

GNUメイクページからこのHow to Use Variablesページをチェックしてください。

一重引用符を追加するだけの場合は、makeがそのまま変数:- などを表示します。 $はMakefileの中で特別な意味を運び、それはエスケープする必要があるので

print_command: 
       @echo '$$COMMAND' 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
$COMMAND 

と。あなたが定義された変数の値を展開するmakeが必要な場合は、上記の場合

print_command: 
       @echo $(value COMMAND) 
$ export COMMAND='My favourite shell is $SHELL'; make print_command 
My favourite shell is /bin/bash 

としてvalue構文を使用し、環境変数の値が/bin/bashに展開されています。

+0

これは完璧です、ありがとう! –

+1

'export'を使わずにコマンドラインに渡すことは可能ですか?(' make'の後で、それでもなおドルが2ドルでなくてもかまいませんか? 'Makefile'自体の定義と同じです。 –