Help us understand the problem. What is going on with this article?

DoxygenをVisualStudioでlibclang依存のビルドをする

More than 1 year has passed since last update.

概要

この記事はDoxygenPreviewerのmaking第一弾、一番苦労したとこです。本当にビルドで何週間使ったことか……。

ここでは:

  • VisualStudioでDoxygenをビルドする(2019年版)
  • Doxyfileなしでドキュメントを生成する

ことに関して書きます。
なおUbuntu(WSL)でのビルドに関しては先に書いた下記を参照してください。
https://qiita.com/hakua-doublemoon/items/34264f42251d8152246d

なお、筆者は普段cmakeもVisualStudioも使わないのでよくわからず適当なことを書いている可能性があります。

ビルドの方針

(精確にはよくわかりませんが)doxygenはデフォルトではlibgccに依存しますが、use_libclangを使うことでlibclangに依存させることができます。
配布されているdoxygenバイナリはlibclangに依存しているため、今回のコンパイルもlibclangに依存させるようにします。
なお同じような記事 https://qiita.com/mima_ita/items/cf81db1005dc596aff95 もあります。上記の記事ではあっさりできている感じですが、筆者はlibclangのせいか、あるいは頭が悪いせいか、異常に苦労しました。

やること

  • LLVMとClangをビルドする
  • flexをインストールする
  • bisonをビルドする
  • (cmakeをいじって)Doxygenをビルドする

ここまで必要なのかよくわかりませんが、とにかくやりました。

詳細

LLVMとClangのビルド

これが必要な理由: DoxygenのコードがClangのヘッダーをincludeするとDeclNodes.incなども要求されるから

下記のQiitaの記事、あるいは公式サイトにヒントがあります。

一応手順を改めて書くと下記のようになります。

  1. LLVMのコードを持ってくる
  2. 持ってきたコードの中のtoolsフォルダにclangフォルダを作ってClangのコードを展開する
  3. cmakeを実行する。バイナリ格納フォルダ(where to build the binaries)はLLVMのコードを展開したフォルダと別にしてください
  4. generateでVS(VisualStudio)のソリューションが作れたらソリューションを開いてReleaseビルド

なお1時間以上かかります。testとかbenchmarkとかみたいなやつは省いても問題ないと思います。

flexのインストール

これが必要な理由: Doxygenのコンパイル時にflex実行ファイルを要求されるから

msysなどを持っていればそれのflexを使ってもいいですし、https://sourceforge.net/projects/winflexbison/ からインストールできるようです。
Path環境変数を通してコマンドプロンプトなどから実行できることを確認しておきます。

bisonのビルドとインストール

これが必要な理由: 配布されているbisonのWindows実行ファイルが古すぎるから

bisonのmakeにはconfigureをするので、msysなどが前提です。
手順としては下記のようになります:

  1. bisonのソースコードを持ってくる(Ubuntuに合わせて3.0.4にしました)
  2. bisonをインストールするフォルダを決める(例えばC:/Users/user/programs/app/bisonとか、どこでもいいですが)
  3. libフォルダにあるconfig.hを後述のように書き換える
  4. ./configure --prefix=C:/Users/user/programs/app/bison する
  5. make して make installする
  6. installしたフォルダをPath環境変数に追加する
  7. コマンドプロンプトでbisonが使えることを確認する

(よくわかりませんが)configureのprefixをmsysのノリで/binとかにするとDoxygenのビルドを始めたときになぜかそこを見に行って死ぬので気を付けましょう。
もしかしたらmakeしたところでhelp2manが必要とか言われるかもしれません。なくてもビルドはされるので手動でインストールしてもいいですが、help2manのインストールは簡単なのでやったほうがいいかもしれません。

lib/config.hの書き換え

/* Define to the GNU M4 executable name. */
-#define M4 "/bin/m4
+/* #define M4 "/bin/m4 */
+#define M4 "C:\\Users\\user\\programs\\app\\bison\\bin\\m4.exe"

/* Define to "-g" if GNU M4 supports -g, otherwise to "". */

こうしないとdoxygenビルド中にbison: m4 subprocess failed: No such file or directoryとか言われます(そのはず)。VisualStudioのコンソールには出てこないでログファイルを見るとわかるので怒りはひとしおです。

Doxygenをビルドする

cmakeします。一度configureを実行するとnameとvalueの一覧が出てくるのでuse_libclangを有効にして再度configureします。(DoxygenPreviewerはdoxyappを改造しているのでbuild_appも有効にします)。
たぶんLLVMConfig.cmakeがほにゃららとか言われるのでDoxygenのフォルダ直下にあるCMakeList.txtに下記のように追記します。

list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
+list(APPEND CMAKE_PREFIX_PATH "C:/Users/user/source/repos/llvm/llvm_build/lib/cmake")

これが何かといえば、CMAKE_PREFIX_PATH という変数にlist的な形式でllvmのフォルダを追加(APPEND)しているというわけです。なので"C:/Users/user/...の部分は各自でllvmをbuildした(LLVMConfig.cmakeファイルがある)フォルダを書いてください。
これでcmakeのconfigureとgenerateができると思います。できたらソリューションファイルを開いてReleaseでbuildしてください。
なおbuild時には_doxygenプロジェクトに対してclangのincludeを追加で設定する必要があるかもしれません。clangのソースコード本体のincludeフォルダとbuildしたフォルダにあるclangのincludeフォルダを_doxygenプロジェクトに追加してください。1

蛇足

  • そういえばiconvの用意も必要かと思いますが、気が付いたらそこでは苦労しなかったのでこの記事には書きませんでした。

  1. LLVMのincludeはたぶん通っていると思います。 

hakua-doublemoon
横浜の外周部で組み込み装置のファームウェア開発やってます。RTOSのカーネル・ネットワーク関連からはじまりゴリゴリのHW依存のアプリケーション作ったりQtでGUI作ったり、LabVIEWでの画像処理とかもしてます。Ruby/RailsやRustが好きですがそれは本職とはあんまり関係ない。
https://pawoo.net/web/accounts/586636
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした