flymake を Visual C++ で (改)

昨日紹介した設定だと .h とかのファイルで使えないことが判明.

flymake を Visual C++ で - @kei10in の日記

VC のコンパイラは拡張子でファイルの種類を判断してるみたい.

なので,強制的に C 言語または C++ としてコンパイルさせるオプション /TC, /TP を追加すればいい.

最終的にはこんな感じ

(defun flymake-vc-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
	(list "cl" (list "/nologo" "/TC" "/W4" "/Wp64" "/Zs" local-file))))
(defun flymake-vc++-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
	(list "cl" (list "/nologo" "/TP" "/W4" "/Wp64" "/Zs" local-file))))
(push '("\\.c\\'" flymake-vc-init) flymake-allowed-file-name-masks)
(push '("\\.h\\'" flymake-vc-init) flymake-allowed-file-name-masks)
(push '("\\.cpp\\'" flymake-vc++-init) flymake-allowed-file-name-masks)
(push '("\\.hpp\\'" flymake-vc++-init) flymake-allowed-file-name-masks)

C++ のヘッダも .h をつかってるなら .h に対しても flymake-vc++-init を使ってやればいい.


あと,あらかじめインクルードディレクトリとかを設定しておきたい場合は,環境変数 INCLUDE に設定しておけばいいみたい.