私はMakefileの行を検出しようとしていますが、 "ルール"の開始点です。ルールの構文は<rule-name> : <rule-prerequisities>
です。そう、簡単ですね?私はコロンを先に見ていきます:コロンの正規表現先読みが置換を無視します
(?=[^:]+:(?!=))
変数の割り当てを区別するためには否定的な先読みがあります。彼らはフォームFOO := foo
を持つことができます。ここでは、変数FOO
$(FOO:.c=.o) : baz
が評価されていますが、すべての
.c
発生が
.o
に置き換えられます。
はしかし、今私はまた、このようなものを持っています。今、これはルールだが、間違った方法で検出されます。問題はさらに、この特定の行で配合されて
:ここ
ifneq ($(words $(subst :, ,$(CURDIR))), 1)
それは続いていないコロンが等号見つけたので、先読みは、一致しました。
基本的に、私はコロンを先読みする必要がありますが、変数の置換内のものは無視します。
TL; DR:コロンを先読みするにはどうすればよいですか?変数の置換は無視しますか?
regex101 link here、私は最後の3行を除くすべてを一致させたいと思います。
非常に単純な解決策は、これのいくつかのバージョンです: ':(?!=)(?!。*?\))'。それをチェックしてください[regex101](https://regex101.com/r/ZZRfbm/1)。これは、単にコロンをチェックし、等号が続くのではなく、閉じ括弧が続くことを確認します。 – ClasG
'$(EXECUTABLE):$(OBJECTS)'のような行では動作しません。 – rwols
TL; DR:RegExの代わりに適切なパーサを使用してください。 –