外部パラメータと内部変数を含むMakefileコマンド

外部パラメータと内部変数を含むMakefileコマンド

Makefileターゲットには複数の部分に分割し、1つの部分のみをx処理yし、そのファイル名をテストランチャーに引数として渡したいファイルのリストがあります。 CIシステムが提供する外部パラメータを制御することはできません。したがって、手動でゼロから始めるようにしてください。通貨例:test_group_count=10 test_group=1 make foo

私の非作業の試みは次のとおりです。

foo:
     group_number=$(shell echo $$(( $(test_group) - 1 )))
     tests="$(shell ls *.feature | awk 'NR%$(test_group_count)==${group_number}')"
     run_tests $${tests}
  • -1工場
  • ファイルのリストは機能しますが、y行に減らすことはできません。
  • ファイル名を変数に保存した後、次のコマンドで使用すると機能しません。

だから私はコマンドがこれら2つの変数、つまりターゲットで定義された変数と呼び出しコマンドによって提供された変数をチェックする方法を見つけることができませんでした。

修正する:

1行で動作させることもできますが、実際のコマンドrun_tests自体は長くて見苦しいコマンドなので、もう少し読みやすいものが好きです。

run_tests $$(ls *.feature | awk 'NR%$(test_group_count)==( $(test_group) - 1 )')

ベストアンサー1

あなたの${group_number}コマンドは、その名前のmakeマクロに置き換えられます。ただし、上記の行はこれをシェル変数に設定します(使用しているシェルとは異なるシェルで単に2倍にしても機能しません$)。

マクロとして定義する必要があります。つまり、ルールではなくタブではなくインデント行に定義する必要があります。でも同様ですtests。各行は異なるシェルで実行され、2つの間で変数を共有することはできません。

作業ソリューション:

foo: group_number=$(shell echo $$(( $(test_group) - 1 )))
foo: tests=$(shell ls *.feature | awk 'NR%$(test_group_count)==${group_number}')
foo:
    run_tests ${tests}

おすすめ記事