CMakeを使用してCプリプロセッサ定義の値を取得するには完全にハック的な方法はありますか?たとえば、正確なMSVCのバージョンを取得するために、このような操作が必要な場合があります。CMakeを使用してプリプロセッサ定義の値を取得
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
get_preprocessor_value("_MSC_FULL_VER" msvc_version)
if (msvc_version LESS 190023918)
message(FATAL_ERROR "Visual C++ 2015 Update 2 or later is required due to a bug in std::atomic.")
endif()
target_compile_definitions(mytarget PRIVATE "_ENABLE_ATOMIC_ALIGNMENT_FIX")
endif()
私はget_preprocessor_value()
を作りました。それを行う関数か、それを行う簡単な方法がありますか?明らかに私はCMakeに簡単なプログラムをコンパイルして出力し、stdoutをキャプチャすることができますが、私のためにそれを行う関数が組み込まれているかどうかは疑問です。
ええ、私は多くを考えました。残念ながら、私はMSVCのCMAKE_CXX_COMPILER_VERSIONの値が実際に各リリースに対応するものはどこにも見つかりませんでした。まぁ。 – Timmmm
実際には、それは['_MSC_FULL_VER'値](https://sourceforge.net/p/predef/wiki/Compilers/)のかなり単純な翻訳です。 190023918は19.0.23918の 'CMAKE_CXX_COMPILER_VERSION'に対応します。 – Timmmm