magのOSS備忘録

使ったOSSソフトウェアについて書いていきます。

Windows(MSYS2)でirony-modeをセットアップする

動機

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に従い, サーバーバイナリをビルドする.

最初に実施したときに, pacmanmingw-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))
  )

参考