によって提供されたマクロ名のリストを繰り返すことはできますかdumpdef
?名前に特定のプレフィックスがある特定のマクロを処理したいと思います。
答え1
dumpdef
マクロのリストとその定義をファイルに書き込みます。存在する標準m4、ファイルは標準エラーなので、これを取得する唯一の方法は、m4スクリプトの外部でリダイレクトを使用することです。 GNU m4は以下を提供します。debugfile
マクロは を使用して再読み込み可能なファイルに出力をリダイレクトしinput
ますが、autoconf の m4 の特定の実装に依存することはできません。
出力の取得に成功してもdumpdef
出力形式は指定されません。index
and を使用してsubstr
文字列を行に分割できますが、これは実装が1行に1つのマクロを印刷すると仮定します。また、マクロ値に改行を含めることができるという保証はありません。 GNU m4を使用すると、出力があいまいになり、違いがわかりません。
define(`foo', `hello')
define(`fooo', `world')
~から
define(`foo', `hello
fooo: world')
m4実装が1行に1つのマクロを印刷し、名前にコロンを追加すると仮定すると、この方法で潜在的なマクロ名を収集し、それを使用してifdef
実際にマクロ名であることを確認できます。ただし、同じデバッグ印刷形式を使用しない実装の影響を受けます。
問題を解決するための最良の方法は、おそらくm4の外にあります。