動機
通常, C/C++(に限ったことではないが)プロジェクトではそれぞれで定義するヘッダファイルをインクルードするため, 全体的に共通の設定を行うと余計な設定まで含んでしまうことになる. プロジェクトAでインクルードするファイルは, プロジェクトBではインクルードしないが共通の設定を使っていると, プロジェクトBでは不要な設定を適用することになる. そのため, プロジェクトごと(ディレクトリごと)に設定を行いたい.
ディレクトリごとにローカルな変数設定
Emacsには「.dir-locals.el」というファイルによって, そのディレクトリとその配下のディレクトリにのみ適用する設定を記載することが出来る.
例えば下記のようなディレクトリ構造で, projectディレクトリの直下に.dir-locals.elが配置してあると, includeやsrcディレクトリにあるファイルを開いたときにも.dir-locals.elファイルの内容が適用される.
project ├── .dir-locals.el ├── include │ └── common.h └── src ├── main.cpp ├── sub.cpp └── sub.h
flycheckの場合
flycheckでも.dir-locals.elの設定が適用される. 例えば, 下記のように設定することで, そのプロジェクト(ディレクトリ)配下のソースコードを開いたときに有効な設定を書くことが出来る.
((nil . ((flycheck-clang-language-standard . "c++11") ; このプロジェクトはC++11に対応している (flycheck-clang-include-path . ("." ; インクルードパスを設定する "src" "include" )) ) ))