m4のdumpdefを介してループを回します。

m4のdumpdefを介してループを回します。

によって提供されたマクロ名のリストを繰り返すことはできますかdumpdef?名前に特定のプレフィックスがある特定のマクロを処理したいと思います。

答え1

dumpdefマクロのリストとその定義をファイルに書き込みます。存在する標準m4、ファイルは標準エラーなので、これを取得する唯一の方法は、m4スクリプトの外部でリダイレクトを使用することです。 GNU m4は以下を提供します。debugfileマクロは を使用して再読み込み可能なファイルに出力をリダイレクトしinputますが、autoconf の m4 の特定の実装に依存することはできません。

出力の取得に成功してもdumpdef出力形式は指定されません。indexand を使用してsubstr文字列を行に分割できますが、これは実装が1行に1つのマクロを印刷すると仮定します。また、マクロ値に改行を含めることができるという保証はありません。 GNU m4を使用すると、出力があいまいになり、違いがわかりません。

define(`foo', `hello')
define(`fooo', `world')

~から

 define(`foo', `hello
 fooo:   world')

m4実装が1行に1つのマクロを印刷し、名前にコロンを追加すると仮定すると、この方法で潜在的なマクロ名を収集し、それを使用してifdef実際にマクロ名であることを確認できます。ただし、同じデバッグ印刷形式を使用しない実装の影響を受けます。

問題を解決するための最良の方法は、おそらくm4の外にあります。

関連情報