問題タブ [m4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
preprocessor - GNU-M4:空の行を削除する
M4を使用して入力ファイルから空の行(余分な空の行)を削除するにはどうすればよいですか?
dnl
スクリプトの各行の最後に改行出力を抑制するために追加できることはわかっていますが、意味する空白行はスクリプトではなく、含まれているデータファイルにあります(ここに置くことは想定されていませんdnl's
)。
私はそのようなことを試みました:
(改行を何も置き換えないでください)しかし、それは機能しませんでした。
ありがとう。
shell - autoconf:ifとm4_ifではなく常にAS_IFを使用する必要がありますか?
autoconfマニュアルでは、AS_IF
の代わりに使用することを提案していますif
が、言及されていませんm4_if
。AS_IF
また、よりも優先されるべきm4_if
ですか?
マニュアルの「組み込みの制限」セクションでは、AS_IF
移植性のために使用するように指示されていますが、AC_REQUIRE
説明では、必要なマクロを展開するために使用するように記述されています。
私はいつも使うべきAS_IF
ですか?答えはイエスのようですが、それでも私は他のマクロで使用されているのを目にしますif
。m4_if
使用しなくても大丈夫なのはAS_IF
いつですか?
gnu - autotoolsconfigureでshellcmdの戻り値を確認する方法
設定プロセス中にシェルコマンドを実行したいのですが、この操作の戻り値が0の場合は、それを使用したいと思います。それ以外の場合は、エラーメッセージを表示して終了します。
私はこのようなものを書きました:
これは機能しません。コマンドが失敗した場合でも、RCは常に値0を取得します。
誰かがそれを正しく行う方法を知っていますか?
ありがとう
recursion - m4 での展開と同じ名前のマクロを定義するにはどうすればよいですか?
GNU m4 1.4.14 を使用して if( を if( に置き換えようとしていますが、試行時に受信ERROR: end of file in argument list
しています:
かっこをエスケープしようとしましたが、メモリが不足していると言ってしばらくするとm4がエラーになりました。マニュアルをスキャンしたところ、この問題に関連するものは何も見つかりませんでした。
マクロの名前を「IF」または「if」以外の名前に変更すると、期待どおりに機能するため、マクロ自体が繰り返し評価されていると思われます。
もしそうなら、一度だけ評価されるマクロをどのように定義できますか? それ以外の場合は、これを修正するために何を調べる必要がありますか?
編集2 回処理することで、この問題を回避する方法を見つけました。1 回目は if を _IF に変換し、次に _IF を if( に変換します。これを行うにはもっと良い方法があると思いますので、これは一時的な解決策にすぎません。
macros - m4 単語内のマクロを展開
私はm4に非常に慣れていませんが、この単純なことを見つけることができません:
単語の途中でマクロを展開することはできますか? (低レベル コードの C シンボル名で使用されるカウンターに使用します)
私は次のように意味します:
予想される出力は次のようになります。
次のようにしても問題ありません。
これが非常に簡単な質問である場合は申し訳ありませんが、私のグーグルの試みは「単語のm4展開マクロ、m4展開部分文字列」などで失敗しました...
ありがとう
編集1:
StackOverflow はこれを推奨しました: Expansion of macro not working in M4 ...これはまさに私が探していたものです。
編集2:
わかりました、それはそれほど簡単ではありません:
これは失敗しますが、これは正常な場合があります。ただし、私の C シンボル名では、これらのマクロを単語の途中で置き換える必要があります。そのためにはどのような方法がありますか?
php - PHP - 拡張機能 Config.m4 ファイル
このチュートリアルを使用して PHP 拡張機能をコーディングしようとしています。
config.m4
ファイルには、などのマクロがありますPHP_ARG_ENABLE
。これらのマクロの定義はどこにありますか?
autotools - autoconf:configure.ac で文字列に変数を使用する方法
configure.ac 内のメッセージに変数を使用する方法
「この文字列はエラーと同様に警告でも使用されています」という文字列を変数で定義し、その変数をAC_MSG_WARNとAC_MSG_ERRORの両方で使用することは理にかなっています。それを行う最善の方法は何ですか?
それに加えて、m4 には、if else を文字列と $foo を引数として取り、この全体を置き換えることができるマクロがありますか?
macos - Mac OS X 10.6.8 での m4 の更新
m4 をバージョン 1.4.6 (OS X 10.6.8 に付属のバージョン) から 1.4.16 にアップグレードしようとしています。私は自作でインストールし、ソースから /usr/local/ にビルドしました (そして /etc/paths を編集して /usr/local を /usr の上に置きました) が、システムのバージョンが依然として優先されるようです。
具体的には、m4 --version', I get
GNU M4 1.4.6 , but if I type
/usr/local/bin/m4 --versoin , I get
m4 (GNU M4) 1.4.16 `. 新しいバージョンをデフォルト バージョンとして設定するにはどうすればよいですか?
...最終的には、autoconf と automake を更新したいと思います。それらのインストールについて知っておくべきことは他にありますか?
c++ - エラー出力に最後の数行のコードを含める
可能であれば、エラー出力に最後の数行のコードを含めるにはどうすればよいですか? __LINE__
GNU g++ のandのサポートについては知っています__FUNC__
が、それらは行番号を int として、関数名を文字列としてのみ提供します-失敗した関数のコードまたは少なくともプログラムによって実行された最後のいくつかのコマンドをダンプしたいと思います。
コードベースを解析し、それらが配置されている関数の文字列構造を挿入するm4スクリプトを作成する可能性があると考えていました(もちろん、それ自体を除く)。
他の/より良いアイデアはありますか?
assembly - 文字列にネストされたm4定義について説明してください
私は現在、「SPARC Architecture, Assembly Language Programming, and C. Second Edition」という本を読んでいます。本の中で、特定のコマンドを理解できない、または理解できない場所にたどり着きました。
問題は、私は最初の行を理解しています。しかし、2行目の2番目の引数が本当にわかりません。本の説明も役に立ちません。
本から:
ここでは、値 0 を持つシンボル loc を最初に定義しました。このシンボルは、アセンブルされる命令のメモリ アドレスであるロケーション カウンタを表します。各マクロ定義は、最初に loc の現在の値を出力するように変更され、次に loc を再定義して loc に命令を格納するために必要なメモリ位置を加えたものになっています。
マクロへの引数は、数値ではなく、文字および文字列です。loc の値を再定義する際に、別の組み込みマクロ eval を使用します。eval は、算術式を表す文字列引数を取ります。eval はこの式を評価し、数値文字列の形式でその値を返します。
上記の説明は、あなたには完全に明確に聞こえるかもしれませんが、私にはそうではありません. 私が正確に理解していないのは、「loc: 44 $1 define('loc', eval(loc+2))」の部分です。
理解できない:
なぜこれは文字列なのですか?
なぜ loc がそこになければならないのですか?
44 $1 を定義した後に、別の定義「define('loc', eval(loc+2))」があるのはなぜですか?