Show page source of インテル_コンパイラー_1000本ノックプロジェクト_p2 #49247

[[PageNavi(NavigationList)]]


==== インテル コンパイラーのコマンドラインツール ====
 makeやビルドスクリプトを利用してコンパイルを行う場合に押さえておきたいのが、インテル コンパイラーに含まれるコマンドラインツールとその名称だ('''表1、2''')。インテル コンパイラーにはコマンドラインツールとしてC/C++コンパイラと専用のリンカー、ライブラリ/アーカイブ管理ツール(アーカイバ)が含まれている。たとえばWindows版のC/C++コンパイラは「icl.exe」、Linux/Mac OS X版のC/C++コンパイラは「icc」という名称となる。

{{{ html
<h6>表1 インテル コンパイラーに含まれるコマンドラインツール(Windows版)</h6>
<table class="wikitable" border="1">

<tr><th>ツール</th><th>Windows版コマンド名</th><th>対応するVisual C++付属ツール</th></tr>
<tr><td>C/C++コンパイラ</td><td>icl.exe</td><td>cl.exe</td></tr>
<tr><td>リンカー</td><td>xlink.exe</td><td>link.exe</td></tr>
<tr><td>ライブラリ/アーカイブ管理ツール(アーカイバ)</td><td>xilib.exe</td><td>lib.exe</td></tr>

</table>
}}}
{{{ html
<h6>表2 インテル コンパイラーに含まれるコマンドラインツール(Linux/Mac OS X版)</h6>
<table class="wikitable" border="1">

<tr><th>ツール</th><th>Linux/Mac OS X版コマンド名</th><th>対応するbinutilsツール</th></tr>
<tr><td>Cコンパイラ</td><td>icc</td><td>gcc</td></tr>
<tr><td>C++コンパイラ</td><td>icpc</td><td>g++</td></tr>
<tr><td>リンカー</td><td>xild</td><td>ld</td></tr>
<tr><td>ライブラリ/アーカイブ管理ツール(アーカイバ)</td><td>xiar</td><td>ar</td></tr>

</table>
}}}
 また、インテル コンパイラーでプロシージャ間の最適化機能を有効にしてコンパイルしたオブジェクトファイル(「/Qipo」もしくは「-ipo」オプションを付けてコンパイルしたオブジェクトファイル)は、Visual C++やGNU binutilsに含まれるリンカーやライブラリ/アーカイブ管理ツールでは扱えない。これらのオブジェクトファイルをリンクしたり、ライブラリ化する場合は、インテル コンパイラーに付属するxlink.exeやxild、xilib.exe、xiarといったツールを用いる必要がある。

 makeやビルドスクリプトを用いてプログラムをコンパイルする場合は、これらのツールを使用するようMakefileやスクリプト、環境変数などを変更すれば良い。たとえばLinux環境でconfigureスクリプトを使ってコンパイルする場合は、次のようにCCおよびCXX、LD、ARという環境変数を指定してconfigureを実行すれば良い。

{{{
./configure CC=icc CXX=icpc LD=xild AR=xiar
}}}

==== Visual C++/GCCと微妙に異なる言語仕様 ====
 インテル コンパイラーはVisual C++やGCCとの互換性があるものの、微妙に仕様が異なる点もある。互換性に関する情報は、インテル コンパイラーのオンラインヘルプ内「Microsoftとの互換性」および「gccとの互換性」ページに詳細が掲載されているが、インテル コンパイラーではVisual C++およびGCC独自の言語拡張やキーワードの一部をサポートしていないほか、標準ではより厳密な型チェックなどが行われる。そのため、Visual C++やGCCで問題なくコンパイルできるソースコードであっても、インテル コンパイラーでコンパイルするとエラーや警告(Warnings)が発生する場合がある。このような場合、インテル コンパイラーに用意されている互換性保持のためのコンパイルオプションを使用することで問題を解決できることがある。

 Windows版インテル コンパイラーには、「/Qms0」および「/Qms1」、「/Qms2」という「Microsoft互換性オプション」が用意されている('''表3''')。これらはC/C++標準規格に沿っていないVisual C++の挙動やバグ等をエミュレートするものだ。また、Visual Studio .NET 2003/2005/2008との互換性を保つためのオプションも用意されている。

{{{ html
<h6>表3 Windows版インテル コンパイラーの互換性オプション</h6>
<table class="wikitable" border="1">

<tr><th>オプション</th><th>意味</th></tr>
<tr><td>/Qms0</td><td>C/C++標準規格に準拠する範囲内でVisual C++をエミュレートする</td></tr>
<tr><td>/Qms1</td><td>/Qms0より多くのバグ/仕様をエミュレートする</td></tr>
<tr><td>/Qms2</td><td>Visual C++の仕様を最大限エミュレートする</td></tr>
<tr><td>/Qvc7.1</td><td>Microsoft Visual Studio .NET 2003との互換性を保つ</td></tr>
<tr><td>/Qvc8</td><td>Microsoft Visual Studio .2005との互換性を保つ</td></tr>
<tr><td>/Qvc9</td><td>Microsoft Visual Studio .2008との互換性を保つ</td></tr>

</table>
}}}
 また、Linux/Mac OS X版インテル コンパイラーでは、コンパイラの動作をGCCの特定バージョン互換にするオプションが用意されている('''表4''')。さらに、Linux/Mac OS X版インテル コンパイラーは独自のC++ライブラリを使用するが、「-cxxlib」オプションを指定することで、GCCに含まれているC++ライブラリやヘッダーファイルを使用してコンパイルを行うことが可能だ。

{{{ html
<h6>表4 Linux/Mac OS X版インテル コンパイラーの互換性オプション(抜粋)</h6>
<table class="wikitable" border="1">

<tr><th>オプション</th><th>意味</th></tr>
<tr><td>-gcc-version=<バージョン></td><td>指定したGCCバージョンとの互換性を保つ</td></tr>
<tr><td>-cxxlib</td><td>GCCに含まれるC++ライブラリおよびヘッダーファイルを使用する</td></tr>

</table>
}}}


[[PageNavi(NavigationList)]]