- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2022-12-18T09:31:13+09:00","","")
#author("2022-12-21T09:57:21+09:00","","")
#topicpath
///////////////////////////////////////////////////////////////////////////////
* 目次 [#d598aa76]
#contents();
///////////////////////////////////////////////////////////////////////////////
* rtags [#aded69fa]
- rtags は、llvm をバックエンドに使用したタグ検索システム。
//==============================================================================
** 環境構築(debian パッケージを使用) [#build-env-debian-package]
+ 必要な関連パッケージをインストールする
# apt-get install rtags
+ コマンド名はオリジナルから若干アレンジされているので注意(他パッケージとの名前の干渉を避ける為と思われる)。
|>|~コマンド名 |
|~オリジナル |~debian パッケージ版 |
|rc |rtags-rc |
|rdm |rtags-rdm |
|rp |rp |
-- rc に関しては、9base パッケージの rc コマンドとの重複を避けるためと思われる。
//==============================================================================
** 環境構築(自前ビルド) [#build-env-build]
+ 必要な関連パッケージをインストールする
# apt-get install clang libclang-dev cmake
+ rtags をビルドする(rtags がディストリビューションでパッケージが用意されているなら、そちらを使うと良い)
++ コードを取得する
$ git clone --recursive https://github.com/Andersbakken/rtags
++ ビルドする
$ cd rtags
$ git submodule init
$ git submodule update
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
~
+ rtags をインストールする
-- ビルドすると rtags/build/bin に以下の実行形式が生成されるので、環境変数 PATH の通っているところに配置する。
$ ls rtags/build/bin
rc rdm rp
//==============================================================================
** タグを生成する [#u9c384fe]
+ まず、daemon を起動する
$ rdm --daemon
+ タグを生成する方法は2つある
//------------------------------------------------------------------------------
*** 1. rc コマンドに直接渡す [#p77de85a]
- 実際に compile するときのコマンドを rc に渡す。
$ rc gcc $(CFLAGS) $(SRCS)
//------------------------------------------------------------------------------
*** 2. rc -Jコマンドで compile_commands.json を読み込ませる [#xa2d2a47]
- compile_commands.json は、cmake か bear で生成する。
-- bear を使う場合(cmake を使わない、Makefile のみのプロジェクトの場合)
--- &color(red){注:下記の make で呼ばれる Makefile で clang を使っていると、後述のコマンド '''"rc -J . "''' を実行したときに失敗することがある模様。その為、Makefile でコンパイラの指定は clang ではなく gcc を使うと良い。};
--- bear コマンドがインストールされていない場合は、インストールする
# apt-get install bear
--- bear コマンドの実行
--- bear コマンドの実行(環境によっては "--" が不要な場合があるので注意。)
$ bear -- make
-- cmake で生成する場合
~
T.B.D.
- rc -Jコマンドで compile_commands.json を読み込ませる
$ rc -J .
-- ここでエラーになる場合、compile_commands.json が無意味な内容になっている可能性がある。
--- 原因としては、ビルド済みの環境で bear コマンドを走らせていた可能性がある。
--- 対策としては、make clean してから再度 bear -- make を実行する必要がある。
//==============================================================================
** emacs から rtags を使う [#f3e74104]
- rtags.el を、 emacs の load-path の通っているところに置く。rtags.el は、rtag リポジトリの下記にある
build/src/rtags.el
- init.el
;;; rtags.el の設定
(when (require 'rtags nil 'noerror)
(when (executable-find "rtags-rc")
(setq rtags-rc-binary-name "rtags-rc")) ; debian では rc -> rtags-rc に変更されている
(when (executable-find "rtags-rdm")
(setq rtags-rdm-binary-name "rtags-rdm")) ; debian では rdm -> rtags-rdm に変更さている
(defun rtags-local-conf ()
(when (rtags-is-indexed)
(local-set-key (kbd "M-.") 'rtags-find-symbol-at-point)
(local-set-key (kbd "M-;") 'rtags-find-symbol)
(local-set-key (kbd "M-@") 'rtags-find-references)
(local-set-key (kbd "M-,") 'rtags-location-stack-back)
))
(rtags-mode)
(rtags-start-process-unless-running)
(setq rtags-autostart-diagnostics t)
(rtags-diagnostics)
(setq rtags-completions-enabled t)
;;; キーバインド:ネットでよく見掛ける設定から
(local-set-key (kbd "M-.") 'rtags-find-symbol-at-point)
(local-set-key (kbd "M-;") 'rtags-find-symbol)
(local-set-key (kbd "M-@") 'rtags-find-references)
(local-set-key (kbd "M-,") 'rtags-location-stack-back)
;;; キーバインド:実際にはこちらを使う
(local-set-key (kbd "C-c d d") 'rtags-find-symbol-at-point)
(local-set-key (kbd "C-c d s") 'rtags-find-all-references-at-point)
(local-set-key (kbd "C-c d c") 'rtags-find-all-functions-called-this-function)
(local-set-key (kbd "C-c d f") 'rtags-find-file)
(local-set-key (kbd "C-c d <") 'rtags-location-stack-back)
(local-set-key (kbd "C-c d >") 'rtags-location-stack-forward)
(define-key rtags-mode-map "p" 'rtags-previous-match)
(define-key rtags-mode-map "n" 'rtags-next-match)
)
(add-hook 'c-mode-common-hook 'rtags-local-conf)
(add-hook 'c++-mode-common-hook 'rtags-local-conf)
(add-hook 'objc-mode-hook 'rtags-local-conf)
(add-hook 'c-mode-hook 'rtags-start-process-unless-running)
(add-hook 'c++-mode-hook 'rtags-start-process-unless-running)
(add-hook 'objc-mode-hook 'rtags-start-process-unless-running)
)
)
-- 上記では、Debian / Ubuntu のパッケージで rc, rdm のコマンド名が変更されているのにも対応している。
- debian パッケージ版を使う場合、rc と rdm のコマンド名が改変されている為、以下の変更も必要となる:
(setq rtags-rc-binary-name "rtags-rc") ; debian では rc -> rtags-rc に変更されている為
(setq rtags-rdm-binary-name "rtags-rdm") ; debian では rdm -> rtags-rdm に変更されている為
//==============================================================================
** Makefile に rtags 用 tag 生成の target を仕込む(おまけ) [#r52d7a6e]
- 下記を Makefile の target として仕込み、
$ make rtags
とすれば、tag 生成までの一通りの処理が実行される:
とすれば、tag 生成までの一通りの処理が実行される(但し、 clean ターゲットは別途用意されている前提となる):
# for rtags:
RTAGS_CMD_RC := /usr/bin/rtags-rc
RTAGS_CMD_RDM := /usr/bin/rtags-rdm
BEAR_CMD := /usr/bin/bear
COMPILE_DB_FILE := compile_commands.json
IS_RTAGS_RDM_STARTED := $(shell ls -1 /run/user/$(shell id -u)/rdm.socket 2>/dev/null| wc -l)
rtags : rtags-kill-daemon rtags-delete-compile-db clean rtags-start-daemon rtags-create-compile-db rtags-load-compile-db
rtags-kill-daemon :
ifeq ($(IS_RTAGS_RDM_STARTED),1)
pgrep rtags-rdm | xargs kill -KILL;
endif
rtags-delete-compile-db :
$(RMF) $(COMPILE_DB_FILE)
rtags-start-daemon :
$(RTAGS_CMD_RDM) --daemon;
rtags-create-compile-db :
$(BEAR_CMD) -- make;
rtags-load-compile-db :
$(RTAGS_CMD_RC) -J .;
//==============================================================================
** 参考リンク [#ib49a8ea]
- [[Home · Andersbakken/rtags Wiki · GitHub(開発元 github の wiki)>https://github.com/Andersbakken/rtags/wiki]]
- [[最強のC/C++インデクサー "Rtags" を本気で使う>https://qiita.com/kota65535/items/39aa4d6e8adf6ab5f98c]]
- [[Rtags で BitVisor の開発を楽になるか?>https://qiita.com/deep_tkkn/items/eb24cb2f0713c7fc4162]]