2017-06-07 17 views
1

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をキャプチャすることができますが、私のためにそれを行う関数が組み込まれているかどうかは疑問です。

答えて

0

これを行うための組み込みのCMake関数はありません。また、CMakeにはstandard moduleというものもありません。

コンパイラバージョンの特定のケースでは、CMakeには変数CMAKE_<LANG>_COMPILER_VERSION(C++の場合はCMAKE_CXX_COMPILER_VERSIONなど)があります。

この変数で十分な情報が得られない場合は、try_run()を使用して、&をコンパイルすることをお勧めします。私はこのハッキーを全く見つけられません、私はそれが実際にCMakeでそのようなことをするかなり慣用的な方法だと言いたいと思います。

+0

ええ、私は多くを考えました。残念ながら、私はMSVCのCMAKE_CXX_COMPILER_VERSIONの値が実際に各リリースに対応するものはどこにも見つかりませんでした。まぁ。 – Timmmm

+0

実際には、それは['_MSC_FULL_VER'値](https://sourceforge.net/p/predef/wiki/Compilers/)のかなり単純な翻訳です。 190023918は19.0.23918の 'CMAKE_CXX_COMPILER_VERSION'に対応します。 – Timmmm

関連する問題