Autoconf

循環通過 m4 的 dumpdef

  • December 22, 2014

是否可以遍歷給出的宏名稱列表dumpdef?我想處理某些名稱中有特定前綴的宏。

dumpdef將宏列表及其定義寫入文件。在標準 m4中,該文件是標準錯誤,因此獲得它的唯一方法是使用 m4 腳本外部的重定向。GNU m4 提供了debugfile將輸出重定向到可以用 讀回的文件的宏input,但您不能依賴 autoconf 中 m4 的特定實現。

即使您設法從 中獲取輸出dumpdef,也未指定輸出的格式。您可以使用indexandsubstr將字元串分成幾行,但假設實現每行列印一個宏,這不能保證;此外,宏值可以包含換行符。使用 GNU m4,輸出是模棱兩可的:你無法區分

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

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

假設 m4 實現每行列印一個宏並在名稱後面加上冒號,您可以通過這種方式收集潛在的宏名稱並用於ifdef檢查它們是否確實是宏名稱。但是您受制於不使用相同調試列印格式的實現。

解決問題的最佳方法可能在 m4 之外。

引用自:https://unix.stackexchange.com/questions/173937