動機
Irony-ModeをWindows環境で使用する方法としてMSYS2を使用するか, MSVCを使用するかを選べるとのことで, 今回はMSYS2を使用してみることにした. Cygwinは…
基本的にSetting up irony mode on Windows · Sarcasm/irony-mode Wiki · GitHubに従って実施したが, MSYS2環境に慣れていなかったために引っかかったところを補足する.
実行環境
- Windows 10 Pro 64bit版 (バージョン 1703)
- MSYS2(mingw64)
- emacs 25.3.1 (x86_64)
- irony 20180418.1311
- company-irony 20170905.1346
MSYS2のセットアップ
使用しているMSYS2のバージョン等は下記の通り. MSYS2自体はMSYS2に従ってインストールを実施した.
user@host MINGW64 ~ $ uname -a MINGW64_NT-10.0 host 2.10.0(0.325/5/3) 2018-02-09 15:25 x86_64 Msys
必要なパッケージのインストール
MSYS2ではpacmanを使用するが下記のコマンドで最新の状態に持っていく. 途中で何度かMSYS2のターミナル(mintty)の再起動が必要になるため, 都度再起動する.
$ pacman -Syuu
ここではGCC, clang, make, CMakeが必要になるため, インストールする. 今回は64bit環境を選んでいるため, 下記のパッケージを使用する.
$ pacman -Suu mingw-w64-x86_64-gcc $ pacman -Suu mingw-w64-x86_64-clang $ pacman -Suu mingw-w64-x86_64-cmake $ pacman -Suu make
Irony-Modeのサーバーバイナリをビルドする
Setting up irony mode on Windows · Sarcasm/irony-mode Wiki · GitHubに従い, サーバーバイナリをビルドする.
最初に実施したときに, pacmanでmingw-w64-x86_64-cmakeではなく, cmakeをインストールしたためか「cmake -G "MSYS Makefiles" ..」を実施した際にGeneratorが見つからないとのエラーに遭遇した. 「mingw-w64-x86_64-cmake」をインストールしておけば問題ない. インストールしたパッケージではなく, パッケージによってCMakeのバージョンが「3.10.2-1」と「3.11.1-2」と違っていたためかもしれない.
下記のファイルが出来上がればOK.
irony-mode/server/build/bin/irony-server.exe
Emacsのセットアップ
引き続き手順に従ってEmacsのセットアップを行う. 作成したirony-server.exeを下記に移動する.
~/.emacs.d/irony/bin/irony-server.exe
irony-modeのインストールにはpackage.elを使用しした. M-x list-packagesから, ironyを選択してインストールすればよい.
設定はuse-packageを利用して下記のようにした. 加えて, 補完のインタフェースにcompanyを使用してるため, company-ironyを合わせてインストールした.
メジャーモードがC/C++のときに設定を有効にする. また, clangに渡すコンパイルオプションに, それぞれC11/C++14を有効にするように指定している.
(setenv "PATH" (concat "C:\\msys64\\mingw64\\bin" ";" (getenv "PATH"))) (setq exec-path (append exec-path '("c:/msys64/mingw64/bin"))) (use-package irony :defer t :commands irony-mode :init (add-hook 'c-mode-hook 'irony-mode) (add-hook 'c++-mode-hook 'irony-mode) :config ;; C言語用にコンパイルオプションを設定する. (add-hook 'c-mode-hook '(lambda () (setq irony-additional-clang-options '("-std=c11" "-Wall" "-Wextra")))) ;; C++言語用にコンパイルオプションを設定する. (add-hook 'c++-mode-hook '(lambda () (setq irony-additional-clang-options '("-std=c++14" "-Wall" "-Wextra")))) (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) ;; Windows環境でパフォーマンスを落とす要因を回避. (when (boundp 'w32-pipe-read-delay) (setq w32-pipe-read-delay 0)) ;; バッファサイズ設定(default:4KB -> 64KB) (when (boundp 'w32-pipe-buffer-size) (setq irony-server-w32-pipe-buffer-size (* 64 1024))) ) (use-package company-irony :defer t :config ;; companyの補完のバックエンドにironyを使用する. (add-to-list 'company-backends '(company-irony-c-headers company-irony)) )