UNIX/Linuxを用いて、C/C++のプログラムをコンパイルする際に多くの場合使用するコンパイラはgccやg++と呼ばれるものを使うことがほとんどだと思います。なので、今回はこれらgccやg++コマンドを用いてC/C++のプログラムをコンパイルする際のオプションについて説明しようと思います。普通にコンパイルするだけなら、gcc プログラム名やg++ プログラム名などとしてコンパイルするだけでできてしまいます。しかし、このコンパイル時にいくつかのコンパイル・オプションを付加することにより、柔軟にプログラムのコンパイルを行うことができるようになります。例えば、コンパイル時間に時間がかかったとしてもプログラムの実行時間を短くしたい、とか生成される実行可能ファイルのファイル名を変更したり、ヘッダファイルのインクルードパスを変更したり、といったことができるようになります。では、続きでいくつかのオプションを紹介します。
主要オプション
オプション -o
後に続く文字列をファイル名とする実行可能ファイルを生成します。これを指定しない場合は、a.outという名前の実行可能ファイルを生成しますが、これを指定することで、実行可能ファイルの名前を任意の名前にすることが可能になります。
オプション -c
ソースファイルのコンパイルのみを行って、オプジェクトファイルを生成するためのオプション。リンカによるリンクを行わない。これにより生成されたオブジェクトファイルはリンクされていないため、そのままでは実行することはできない
オプション -I
通常のヘッダファイル以外のヘッダファイルを使用する際に、そのヘッダファイルが存在するパスを記述します。-Iの後ろにヘッダファイルの存在するディレクトリへのパスを書くことによって使用できます。通常は使用する必要はないはず。
最適化オプション(プログラムの高速化)
オプション -O1, -O2, -O3
まず、実行プログラムの最適化を行うオプションです。実行可能ファイルのサイズやコンパイルに要する時間を犠牲にして、実行ファイルを実行した時の実行時間の短縮を行うことでプログラムの高速化を目指します。3つの種類は、最適化の強さの具合を表わしており、O1 -> O2 -> O3の順で最適化が強くなり、O3の場合が最も強い最適化を行います。
g++ -O3 hello.cpp
オプション -mtune=cpu_type
=の後ろのcpu_typeにはユーザ環境固有のCPUタイプを直接指定することで、プログラムの最適化を行います。設定できるマシンタイプはgcc, g++ のバージョンによって違うのですが、pentium4, prescott, nocona, core2などがあります。これは実行するマシンに依存したオプションの1つなので、使用するには注意が必要です。
g++ -mtune=core2 hello.cpp
関連記事