C言語 - Clang - コンパイル・リンク


 クラウディア


1. 概要
2. main のみ
3. 2 つ以上
4. デバッグシンボル出力
5. インクルードパス指定
6. 参考サイト

1. 概要

 複雑なシステムのプログラムをコンパイル・リンクする際は、「cmake」なり「make」なりを使用しますが。  簡単なプログラムであれば、「clang」のコマンドのみで、コンパイル・リンクすることができます。

2. main のみ

 「main.cpp」のみで成り立つ、簡単なサンプルプログラムであれば。

clang main.cpp
 のみで、コンパイル・リンクできます。  カレントディレクトリに。

a.out
 が作成されて。

./a.out
 で実行することができます。

3. 2 つ以上

 2 つ以上のソースが存在する場合。  例えば、「main.cpp」「sub.cpp」とあって、「sub.cpp」内に、「class」の定義が存在し、「main.cpp」からその「class」を使用している場合は。

clang++ main.cpp sub.cpp
 で、コンパイル・リンクします。  「class」を使っているので、「clang++」と「C++」でコンパイルすることを明示します。

4. デバッグシンボル出力

 「lldb」を使って、デバッグしたいとき。  最適化なしで、デバッグシンボル出力するには。  前項と同じものを、コンパイル・リンクする場合。

clang++ -O0 -g main.cpp sub.cpp
 と「-O0」の最適化なしオプション、「-g」のデバッグシンボル出力オプションをつけます。  これで、デバッグするには。

lldb a.out
 プロンプトに入ったら。

b main

run
 で、「main」の箇所で停止します。

5. インクルードパス指定

 例えば、「clang」のデフォルトのインクルードパスは、「clang++」の場合、カレントパス以外に。

 /usr/include/c++/v1
 /usr/lib/clang/18/include
 /usr/include
 があるようです。  「-v」オプションで、「clang++」を動作させて調べました。  「18」は、「clang」のバージョンが「FreeBSD clang version 18.1.6」であったためです。  これに例えば。

/usr/local/include
 をインクルードパスとして追加するには。

clang++ source.cpp -I /usr/local/include
 と、「-I」オプションを使用します。

6. 参考サイト

 本ページは、下記のサイトを参考にさせていただきました。
コンパイラによるリンク時最適化(Link Time Optimization) #C++

AbemaTV 無料体験