ちょっと前に clang で include 依存関係解析を書きましたが、最終的にやりたいことができるツールが既にあったので使ってみました。
Include-What-You-Use
ツールは Include-What-You-Use といいます。こちらの存在は以下の記事を見て知りました。
Include-What-You-Use も clang の AST を利用して解析しているそうです。
ホームページのダウンロードリンクに Windows バイナリがあったので、今回はこれを使いました。
Downloads
また、使用方法は Github のドキュメントを参照。
How to Run
CXX を include-what-you-use にしてビルドすれば良いようです。
iutest で試した結果がこちら。
$ make CXX=include-what-you-use sample include-what-you-use -I../../include -g -Wall -Wextra -Wundef -c ../../samples/main.cpp In file included from ../../samples/main.cpp:24: In file included from ../../samples/../include/iutest.hpp:23: In file included from ../../include/iutest_core.hpp:20: In file included from ../../include/internal/iutest_result_reporter.hpp:20: In file included from ../../include/internal/iutest_core_impl.hpp:20: In file included from ../../include/internal/iutest_internal.hpp:20: In file included from ../../include/internal/../iutest_pred.hpp:20: In file included from ../../include/iutest_assertion.hpp:20: In file included from ../../include/iutest_result.hpp:20: In file included from ../../include/internal/iutest_message.hpp:20: In file included from ../../include/internal/../iutest_env.hpp:20: In file included from ../../include/internal/iutest_charcode.hpp:20: In file included from ../../include/internal/iutest_port.hpp:24: In file included from ../../include/internal/iutest_internal_defs.hpp:20: In file included from ../../include/internal/../iutest_defs.hpp:20: ../../include/internal/iutest_compiler.hpp:38:12: fatal error: 'windows.h' file not found # include <windows.h> ^ ../../samples/main.cpp should add these lines: #include <vcruntime_new.h> // for operator new #include "internal/../impl/../iutest_env.hpp" // for Environment #include "iutest_config.hpp" // for IUTEST_HAS_LIB #include "util/iutest_util_output.hpp" // for Console ../../samples/main.cpp should remove these lines: - #include <iostream> // lines 50-50 The full include-list for ../../samples/main.cpp: #include <vcruntime_new.h> // for operator new #include "../include/iutest.hpp" // for AddGlobalTestEnvironment #include "internal/../impl/../iutest_env.hpp" // for Environment #include "iutest_config.hpp" // for IUTEST_HAS_LIB #include "util/iutest_util_output.hpp" // for Console --- Makefile:104: ターゲット 'main.o' のレシピで失敗しました make: *** [main.o] エラー 7
Windows バイナリを使っているため、Windows sdk のパスを通さないといけません。
が、とりあえず sample.cpp に不要な iostream の include があるのがわかったので修正しました。
Visual Studio でできないか?
Visual Studio の拡張機能でないかなーと見ましたが、今現在はないもよう。Clang for Windows があるし、このへんも対応してくれるとうれしいなーと思いました。
(※ なんとかできないか調査中)
2016/4/14 追記
include-what-you-use-cl を公開しました。こちらは Visual Studio のプラットフォームツールセットとして、Include-What-You-Use を使えるようにするツールです。
git clone して install.bat を実行するとインストールされます。
別途、Include-What-You-Use.exe へのパスを通しておく必要があります。
インストールすると、プラットフォームツールセットに Include-What-You-Use の選択肢が出ます。
ビルドすると以下のように結果が出ます。
(※エラー出るかもしれませんが、依存関係の解析はできてるはず。)
(※なんでツールセットなのかは、ツールセットの定義の仕方の勉強がてらです。)
追記ここまで
==============
最後に
今回は、軽く触れる程度に Include-What-You-Use を紹介させていただきました。では、また今度。
0 件のコメント:
コメントを投稿