[解決済み] 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()
関連
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み】CMakeでGCCとClang/LLVMの切り替えを行う。
-
[解決済み] CMakeを使用して、フォルダ内のすべてのファイルをターゲットに自動的に追加しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] Regex: 大文字と小文字の区別を無視する