どのようにconfigureのデフォルトの選択-g O 2を取り除きますか?

3258 ワード

http://lists.gnu.org/archive/html/autoconf/2006-04/msg00002.html
http://www.linuxidc.com/Linux/2013-07/87257.htm
 
atootconfで生成されるコンパイルオプションは、デフォルトでは「-g-O 2」です。この「-g」のオプションは私を混乱させました。GDBデバッグに必要な情報が生成されたと思っていますので、後の「-O 2」のオプションを管理していません。
実際にGDBでデバッグする時、シングルステップトレースコード、GDB表示のコードが非常に混乱しています。コード行が表示されていないか、またはライブラリ関数のように見えるコードが多数挿入されています。変数値が間違っていることを確認する場合もありますが、この変数によって生成された後の結果は正しいです。
GCC文書を見ると、-gと-Oオプションは同時に使用することができますが、「サプライズ」の結果が出ます。
開発段階のデバッグ作業を容易にするために、atoconfにデバッグオプションを追加して、その生成のコンパイルオプションを制御する必要があります。これはconfigur.acでAC_を使うことができます。アルゴ.ENABLE宏は実現に来ます。
AC_アルゴ.ENABLEマクロのフォーマットは以下の通りです。    AC_アルゴ.ENABLE(feature,help-string,[actionn-if-given],[actionn-if-not-given]])
configure.acに以下の構成を追加します。
# enable debug or not                                                         

AC_ARG_ENABLE(debug, AS_HELP_STRING([--enable-debug], [enable DEBUG mode(default=no)]),

              [],                                                           

              [enable_debug=no])                                             

AS_IF([test "x$enable_debug" = "xyes"], [CXXFLAGS="-g2 -O0 -DDEBUG -Wall"],       

    [test "x$enable_debug" = "xno"], [CXXFLAGS="-O2 -Wall"],                 

    [])        
 
上の構成は、最終的に生成されたconfigureスクリプトに一つの--enable-debugオプションを追加し、このオプションを指定すると、CXXXX FLAGS=「-g 2-O 0-DDEBUG-Wall」という意味です。
それぞれのenableオプションには一つのenable_があります。フィーチャー変数はこれに対応して、ユーザーが指定した値をこの変数で取得できます。上のシーンを例に挙げます。(1)パラメータなしで--enable-debugを指定すると、enable_debug変数値は「yes」です。2)指定したら--enabole-debug=no、enable_debug変数値は「no」です。(3)指定--disable-debugなら--enable-debug=の効果と同じです。
ASIFマクロはC言語のif文と機能が似ています。フォーマットは以下の通りです。    ASIF(test 1,[run-if-true 1],.,[run-if-false]
例:AS_IF([test"x$foo"=xyes],[HANDLE_]FOO([yes])        [test「x$foo」!=xno,[HANDLE_]FOO([maybe])        [echo foo not specified)
ASIFの行為は、まず最初の条件を確認し、成立すれば対応する動作を実行することです。最初の条件が成立しないなら、次の条件を検査し続けます。すべての条件が成立しない場合は、run-if-falseを実行します。
debugオプションを追加したら実行します。/configure--helpは私達が指定した文書の文字列を見ることができます。 --enabole-debug          enable debug mode(default=no)
こうすれば、コンフィグのオプションでコンパイルされた実行可能ファイルにデバッグ情報があるかどうかを制御できます。