他の回答はシェル、seq、foreachで優れており、おそらくすべてのニーズに適しています。 シェルおよび配列の使用には問題がある(例えば、配列は使用できません)、それだけでメイクしてシーケンスを生成することは容易である:
NUM?=3
ENCODE=$(or $(and $(word $(1), $(2)), $(2)), $(call ENCODE, $(1), x $(2)))
encoded=$(call ENCODE, $(NUM))
$(warning encoded: $(encoded))
GENERATE=$(or $(and $(word $(1), $(2)), $(2)), $(call GENERATE, $(1), $(2) $(words 0 $(2))))
sequence=$(call GENERATE, $(NUM))
$(warning sequence: $(sequence))
ENCODE直接(番号をコードGNU Make Standard Libraryで使用される符号化からインスピレーションを得ています同じ長さのxのシーケンスに変換する)。 GENERATEはseqと同じ結果を返します。両方を改善して1つ以上のステップを追加するなどして、ステップを追加することができます。結果の変数は、他の答えで説明されているようにforeachで使用できます。
[email protected]:~$ make NUM=13
Makefile:5: encoded: x x x x x x x x x x x x x
Makefile:9: sequence: 1 2 3 4 5 6 7 8 9 10 11 12 13
make: Nothing to be done for 'all'.
GNU Makeを使用していると仮定して、[マニュアルを読む](https://www.gnu.org/software/make/manual/make.html)にしてください。 [foreach関数について](https://www.gnu.org/software/make/manual/make.html#Foreach-Function)を読むのと同じですか? –
@Someprogrammerdudeはい、foreach関数について読んだことがありますが、固定リストが必要なので、私のケースに合わないと思います。私の場合、NUM_VARSは固定されていません。 – Codename
どのように 'NUM_VARS'を設定しますか?別の場所で使っていますか?代わりに数字のリストに変更することは可能でしょうか? –