動機
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のセットアップを行う. 作成した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
(add-hook 'c-mode-hook
'(lambda ()
(setq irony-additional-clang-options '("-std=c11" "-Wall" "-Wextra"))))
(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)
(when (boundp 'w32-pipe-read-delay)
(setq w32-pipe-read-delay 0))
(when (boundp 'w32-pipe-buffer-size)
(setq irony-server-w32-pipe-buffer-size (* 64 1024)))
)
(use-package company-irony
:defer t
:config
(add-to-list 'company-backends '(company-irony-c-headers company-irony))
)
参考