信頼できるチェックは、CMAKE_<LANG>_COMPILER_ID変数を使用することです。たとえば、C ++コンパイラを確認するには:
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# using Clang
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# using GCC
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
# using Intel C++
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
# using Visual Studio C++
endif()
これらは、ccacheのようなコンパイララッパーが使用されている場合にも正しく動作します。
CMake 3.0.0以降、CMAKE_<LANG>_COMPILER_IDApple提供のClangの値はになりAppleClangます。アップルが提供するClangと通常のClangの両方をテストするには、次のif条件を使用します。
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# using regular Clang or AppleClang
endif()
AppleClangポリシーの説明もご覧ください。
CMake 3.15は、clang-clと通常のclangフロントエンドの両方のサポートを追加しました。変数を調べることで、フロントエンドのバリアントを特定できますCMAKE_CXX_COMPILER_FRONTEND_VARIANT。
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC")
# using clang with clang-cl front end
elseif (CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "GNU")
# using clang with regular front end
endif()
endif()