ちょっとyaml形式でログを吐きたくてyaml-cppを使ってみようと思ったものの、ビルドではまったので対応メモです。
まずは普通にビルド
yaml-cppはCMakeLists.txtを持っているため、CMakeを使えば簡単にVisual Studioのソリューションファイルを作ることができます。
ここは特に設定を何も変更せず、デフォルトのままで問題ないです。
ただ、できたソリューションファイルをそのままビルドしてもコンパイルエラーが大量に発生してしまうので、そいつらに対処してやる必要があります。
「 C3646 ‘_NOEXCEPT’: 不明なオーバーライド指定子です」のエラーの対応
さて、ビルドしたらエラーがたくさん出ます。その中で、まずは以下のエラーの対応を行います。
src/exceptions.cpp
とinclude/yaml-cpp/exceptions.h
に
// This is here for compatibility with older versions of Visual Studio // which don't support noexcept #ifdef _MSC_VER #define YAML_CPP_NOEXCEPT _NOEXCEPT #else #define YAML_CPP_NOEXCEPT noexcept #endif
というような記述があります。これを、
// This is here for compatibility with older versions of Visual Studio // which don't support noexcept //#ifdef _MSC_VER // #define YAML_CPP_NOEXCEPT _NOEXCEPT //#else #define YAML_CPP_NOEXCEPT noexcept //#endif
こうしてしまいましょう。すなわち、1行だけ残してコメントアウトしてやります。
ちなみにこのエラーですが、_NOEXCEPT
がVisual Studio 2017 version 15.8で削除されたことが原因です。なので、Visual Studio 2017でもこれより古いバージョンであればこのエラーは出ないと思われます。
STL Features and Fixes in VS 2017 15.8 - C++ Team Blog
15.7 was our first feature complete C++17 library (except floating-point ), and in 15.8 we have addressed large numbers ...
なお、最新のmasterリポジトリではこの問題は修正されているので、次期バージョンではこの問題は解決されるものと思われます。
「C2220 警告をエラーとして扱いました。’object’ ファイルは生成されません。」の対応
ここまでくればエラーがかなり減っていて、あとはこのエラーだけかと思います。
構成プロパティ → C/C++ → 全般
の、警告をエラーとして扱う
をいいえ (/WX-)
に設定します。
対象は以下のプロジェクトファイルです。
- gmock
- gmock_main
- gtest
- gtest_main
これで、無事yaml-cpp 0.6.2がVisual Studio 2017でビルドが成功すると思います。
コメント