前提条件
普通は
$gcc -c hoge.c piyo.c $gcc -o foo hoge.o piyo.o
みたいに
- 各ソースをコンパイルしてオブジェクトファイルを全部作る
- オブジェクトファイルをまとめて実行ファイルを生成
の手順でプログラムをビルドすると思います。makefileの場合もおんなじことをしていると思います。
で、デバッグ情報を付加しようと思ったら-gとか-ggdb3とかのオプションをつけると思います。コンパイル時につけるのは当然として、実行ファイル生成時も必要なのか・・・?
$gcc -g -c hoge.c piyo.c $gcc -g -o foo hoge.o piyo.o # ここの-gは意味があるのか?
検証方法
以下の手順で生成されるバイナリに差が出るかチェック。
$gcc -g -c hoge.c piyo.c $gcc -o disable_debug hoge.o piyo.o $gcc -g -o enable_debug hoge.o piyo.o $diff disable_debug enable_debug
実行ファイル生成時の-gの有無で実際に生成される実行ファイルに違いが出るかを調べる。適当にhogeとかpiyoとかしてるけど、手元の適当なプロジェクトでも同じことをして検証してます。
結果
完 全 に 一 致
結論
何がどうなってこういうことになってるのかはわからないけど、実行ファイル生成時の-gは意味をなさない。失敗はしないから付けてもいいのだろうけど・・・。