1. ホーム
  2. c++

[解決済み] CMakeで、コンパイラがClangであるかどうかをテストするにはどうすればよいですか?

2022-04-20 01:14:07

質問

のセットを持っています。 クロスプラットフォームCMakeビルドスクリプト でのビルドをサポートしています。 Visual C++ GCC .

試しているのは クラング しかし、CMake スクリプトでコンパイラが Clang であるかどうかをテストする方法がわかりません。

コンパイラがClangかどうかを確認するには、何をテストすればよいのでしょうか?現在、私たちは MSVC CMAKE_COMPILER_IS_GNU<LANG> で、それぞれVisual C++とGCCのテストができます。

解決方法は?

確実なチェックは 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_ID の値は、Apple 提供の Clang は AppleClang . Apple が提供する Clang と通常の Clang の両方をテストするには、次のような if 条件を使用します。

if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  # using regular Clang or AppleClang
endif()

また AppleClangポリシーの説明 .

CMake 3.15 の両方をサポートするようになりました。 clang-cl と通常のclangフロントエンドの2種類があります。フロントエンドの種類は、変数 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()