'='を含むターゲットのMake


通常、ターゲット`hello_world`をmakeするときには、

[code]

    make hello_world
    
[/code]

とします。  
同じ要領で、ターゲット`hello=world`をmakeしようとして、

[code]

    make hello=world
    
[/code]

とすると、意図した結果にはなりません（変数`hello`の値を`world`に設定して、デフォルトターゲットがmakeされます）。

これを`hello=world`のmakeであると認識させるにはどうすればよいでしょうか？

一般論としてmakeのターゲット名に'='を使うべきでないことは理解していますが、やむをえない事情によりwork-aroundを探しています。

* * *

状況を再現する最小構成  
GNU Make 4.2.1 on cygwin x86_64

`Makefile`の内容(スペースはタブに変更してください)

[code]

    HELLO:=hello=world
    all:       # "all world"
        @echo all $(hello)
    $(HELLO):  # "hello=world"
        @echo hello=world $(hello)
    
[/code]

普通に実行

[code]

    $ make hello=world
    all world
    
[/code]

シングルクォートして実行

[code]

    $ make 'hello=world'
    all world
    
[/code]

ダブルクォートして実行

[code]

    $ make "hello=world"
    all world
    
[/code]

エスケープして実行

[code]

    $ make hello\=world
    all world
    
[/code]

シングルクォート＋エスケープして実行

[code]

    $ make 'hello\=world'
    all
    
[/code]

ダブルクォート＋エスケープして実行

[code]

    $ make "hello\=world"
    all
    
[/code]




これでいかがでしょうか。

[code]

    luna:~ % make --version | head -1
    GNU Make 4.2.1
    luna:~ % make .DEFAULT_GOAL=hello=world
    hello=world
    luna:~ %
    
[/code]




これでいかがでしょうか。

[code]

    luna:~ % make --version | head -1
    GNU Make 4.2.1
    luna:~ % make .DEFAULT_GOAL=hello=world
    hello=world
    luna:~ %
    
[/code]

