コマンドラインから追加の変数を渡して質問する

コマンドラインから追加の変数を渡して質問する

変数をコマンドライン引数として GNU Makefile に渡すことはできますか? 言い換えると、最終的に Makefile で変数になる引数をいくつか渡したいのです。

ベストアンサー1

makefile の外部から変数を設定するには、いくつかのオプションがあります。

  • 環境から- 各環境変数は同じ名前と値を持つ makefile 変数に変換されます。

    -eオプション(別名)をオンに設定することもできます--environments-override。環境変数はmakefileに設定された割り当てを上書きします(これらの割り当て自体がoverride指令ただし、これは推奨されておらず、?=代入 (条件付き変数代入演算子、変数がまだ定義されていない場合にのみ効果があります) を使用する方がはるかに優れており、柔軟性があります。

    FOO?=default_value_if_not_set_in_environment
    

    特定の変数は環境から継承されないことに注意してください。

    • MAKEスクリプトの名前から取得されます
    • SHELLは、makefile 内で設定されるか、またはデフォルトで設定されます/bin/sh(理由: コマンドは makefile 内で指定され、シェル固有です)。
  • コマンドラインから-makeターゲットと混合して、コマンドラインの一部として変数の割り当てを行うことができます。

    make target FOO=bar
    

    しかし、makefile内の変数へのすべての割り当てFOOは、override指令代入時に使用します。(効果は環境変数のオプションの場合と同じです-e)。

  • 親 Make からのエクスポート- Makefile から Make を呼び出す場合、通常は次のように変数の割り当てを明示的に記述しないでください。

    # Don't do this!
    target:
            $(MAKE) -C target CC=$(CC) CFLAGS=$(CFLAGS)
    

    代わりに、これらの変数をエクスポートする方がよい解決策かもしれません。変数をエクスポートすると、すべてのシェル呼び出しの環境にその変数が組み込まれ、これらのコマンドからの Make 呼び出しでは、上記で指定したようにこれらの環境変数が選択されます。

    # Do like this
    CFLAGS=-g
    export CFLAGS
    target:
            $(MAKE) -C target
    

    引数なしでを使用すると、すべての変数をエクスポートすることもできます。export

おすすめ記事