概要
自作ヘッダーなどをインクルードする場合、参照するファイルがあるフォルダをパスとして追加する必要があります。
Visual Studioであれば比較的簡単に設定できるのですが、clang++ではどうすればよいかをまとめました。
使用するファイル
フォルダ構成
ファイルの中身
#include<iostream> void header2(){ std::cout<<"lib2/header2.h"<<std::endl; }
#include<iostream> void header2(){ std::cout<<"lib2/header2.h"<<std::endl; }
#include <iostream> #include <header1.h> #include <header2.h> int main(){ header1(); header2(); }
実行時に指定(-Iを使用)
clang++でコンパイルする際に、
-I インクルードしたいフォルダ名
とすることで、コンパイル時にパスを追加することができます。
#カレントディレクトリを変更する $ cd ~/Desktop/clang_test #コンパイル(a.outが生成される) $ clang++ main.cpp -I ~/Desktop/clang_test/lib1 -I ~/Desktop/clang_test/lib2 #実行 $ ./a.out lib1/header1.h lib2/header2.h
環境変数に追加
- 先ほどの方法は手軽ですが、その反面コンパイルするごとに指定しないといけないため、何度も実行する場合などには向いていません。
- そこで、環境変数であるCPLUS_INCLUDE_PATHにパスを設定する方法を紹介します。
- これに追加したパスはclang++がコンパイルする際に、参照してくれるそうです(参考:c++ - how to add include paths to clang globally - Stack Overflow)。
#パスの追加 $ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/Desktop/clang_test/lib1 $ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/Desktop/clang_test/lib2 #コンパイルと実行 $ clang++ main.cpp $ ./a.out lib1/header1.h lib2/header2.h
CPLUS_INCLUDE_PATHに毎回追加するのが面倒なら、シェルスクリプトにまとめて実行するようにしましょう。
clang_test_dir=~/Desktop/clang_test #追加 export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:$clang_test_dir/lib1:$clang_test_dir/lib2" #表示 echo $CPLUS_INCLUDE_PATH