概要
この記事は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の記事、あるいは公式サイトにヒントがあります。
一応手順を改めて書くと下記のようになります。
- LLVMのコードを持ってくる
- 持ってきたコードの中のtoolsフォルダにclangフォルダを作ってClangのコードを展開する
- cmakeを実行する。バイナリ格納フォルダ(where to build the binaries)はLLVMのコードを展開したフォルダと別にしてください
- 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などが前提です。
手順としては下記のようになります:
- bisonのソースコードを持ってくる(Ubuntuに合わせて3.0.4にしました)
- bisonをインストールするフォルダを決める(例えば
C:/Users/user/programs/app/bison
とか、どこでもいいですが) - libフォルダにあるconfig.hを後述のように書き換える
-
./configure --prefix=C:/Users/user/programs/app/bison
する -
make
してmake install
する - installしたフォルダをPath環境変数に追加する
- コマンドプロンプトで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の用意も必要かと思いますが、気が付いたらそこでは苦労しなかったのでこの記事には書きませんでした。
-
LLVMのincludeはたぶん通っていると思います。 ↩