Windows Subsystem for Linux において Emacs を用いた C/C++ の開発環境を整える:auto-completeを用いた自動補完
この記事では,Windows 10 上で C/C++ の開発環境を整える方法についてまとめます.エディタとしては Emacs を使用します.コンパイラをはじめとする各種ツールを導入したうえで,Emacs へ Auto-Complete をはじめとする各種パッケージを導入し,C/C++ の自動補完が可能な状態にします.
はじめに
Windows 10 では Windows Subsystem for Linux (WSL, 旧称 Bash on Ubuntu on Windows)が利用可能になりました.これを用いて,仮想 PC やデュアルブートを利用せずに,Windows 10 があらかじめ導入された PC で手軽に Linux 環境を試すことができるようになりました.以下に,WSL 上の Emacs で C/C++ の自動補完を行えるようにすることを目標とし,設定を行った記録を残します.
前提条件
以下の操作を行った環境は次の通りです.なお,この記事では WSL 自体の導入方法については割愛します.また,Bash の扱いや基本的な Linux コマンドの使用法についても省略します.
- ホスト PC の OS:Windows 10 Pro(バージョン 1709)
- WSL で利用する Linux ディストリビューション:Ubuntu
X11 および日本語入力を使用するための設定
普段の開発スタイルや,開発したいアプリケーションの種類にもよりますが,あらかじめ X Window System(別称 X11)や日本語入力ができるように設定しておくと便利なことがあります.具体的な手順はここでは省略しますが,おおむね以下の記事に従い作業を行い,これらの設定を行いました.
その結果,以下のように xeyes, xclock のような,X11 を使用するアプリケーションを正常に動作させることができるようになりました.もちろん Emacs も含まれています.
開発ツールを導入する
このような環境で,C/C++の開発に必要なツールや,エディタを WSL 環境に導入しました.具体的には,以下のものを導入しました.Ubuntu では apt-get を利用して,容易にこの操作を行うことができました.
Emacs へパッケージを導入する
準備:MELPA を利用可能にする
今回導入するものを含め,Emacs 用の主要なパッケージは Milkypostman’s Emacs Lisp Package Archive (略称:MELPA)にて管理されています.Emacs で MELPA を利用するように設定することで,パッケージの導入が容易になります.私は
MELPA に従い,以下の内容を ~/.emacs
に加えて Emacs を再起動しました.これで,Emacs で MELPA を利用できるようにしました.なお,すでに Customize などにより ~/.emacs
に何らかの記述がなされていることがあります.その場合には,その記述を手動で変更せず,その記述以降に以下の記述を行うことをお勧めします.
(require 'package) (let* ((no-ssl (and (memq system-type '(windows-nt ms-dos)) (not (gnutls-available-p)))) (proto (if no-ssl "http" "https"))) (add-to-list 'package-archives (cons "melpa" (concat proto "://melpa.org/packages/")) t) (when (< emacs-major-version 24) (add-to-list 'package-archives '("gnu" . (concat proto "://elpa.gnu.org/packages/"))))) (package-initialize)
その後,package-install reports "no match" - Emacs Stack Exchange に従い,以下の操作を Emacs 上のミニバッファで行うことによりパッケージの一覧を更新しました *1.
M-x package-refresh-contents
Auto-Complete の導入と設定
Auto-Complete は,その名の通り, Emacs におけるコードの自動補完を支援するためのパッケージです.主に上記ページの指示に従い,以下のようにこれをインストールし,設定しました.
まずは,MELPA から同パッケージを取得し,導入しました.これは Emacs 上で以下のコマンドを入力して行いました *2.
M-x package-install RET auto-complete
auto-complete-clang-async および clang-complete の導入
Auto-Complete だけでも一応の補完はできるものの,標準関数の補完などは働きません.そこで,標記のパッケージを導入しました.Emacs 用のパッケージ auto-complete-clang-async がコマンド clang-complete と連携することにより,補完機能がより便利になるというものです.なお,以下の手順は GitHub - Golevka/emacs-clang-complete-async: An emacs plugin to complete C and C++ code using libclang および emacsのauto-complete-clang-asyncパッケージの使い方 - Narrow Escape を参考にしたものです.
まずは,clang-completeを導入しました.シェル上で適当なディレクトリに移動し,以下の操作によりビルドとインストールを行いました.
sudo apt-get install -y clang llvm-dev libclang-dev git clone https://github.com/Golevka/emacs-clang-complete-async cd emacs-clang-complete-async make cp clang-complete ~/.emacs.d/
その次に,auto-complete-clang-async を導入しました.先ほどと同様に, Emacs 上で以下のコマンドを入力しました.
M-x package-install RET auto-complete-clang-async
そして,~/.emacs
に以下の記述を加えました.
(require 'auto-complete-clang-async) (defun ac-cc-mode-setup () (setq ac-clang-complete-executable "~/.emacs.d/clang-complete") (setq ac-sources '(ac-source-clang-async)) (ac-clang-launch-completion-process) ) (defun my-ac-config () (add-hook 'c-mode-common-hook 'ac-cc-mode-setup) (global-auto-complete-mode t)) (my-ac-config)
これで,標準関数まで自動補完が有効になりました.