mcpField
M
msvc-cl

msvc-cl

github.com/mohitmishra786開発269629 回インストール18 週間前に更新
リポジトリ

msvc-cl について

WindowsでMSVCの`cl.exe`や`clang-cl`を使うC/C++コンパイルをエージェントに案内するスキルです。コンパイラフラグの変換、ランタイムライブラリの選択、MSBuildやCMakeの設定、リンカーエラーの調査を支援します。

主な機能

  1. 01MSVC環境とコンパイラーの設定
  2. 02GCCフラグからMSVCフラグへの変換
  3. 03ランタイムライブラリの選択
  4. 04clang-clの使い方
  5. 05PDBデバッグ情報の設定
  6. 06一般的なリンカーエラーの調査

活用シーン

  1. 01GCCのコンパイルオプションをMSVCへ移行
  2. 02プロジェクト内のランタイムライブラリ設定を統一
  3. 03PDBを設定してデバッグに備える
  4. 04未解決外部シンボルなどのリンクエラーを調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill msvc-cl

インストール後、Claude Code で/msvc-clを入力して読み込まれたか確認します。

同梱ファイルreferences/flags.md

詳細

MSVC cl.exe と clang-cl

目的

Windows での C/C++ コンパイルについて、MSVC cl.exe、MSVC 互換ドライバーとしての clang-cl、MSBuild のプロジェクト設定、ランタイムライブラリの選択方法をエージェントに案内します。

トリガー

  • 「コマンドラインから MSVC でコンパイルするにはどうすればよいですか?」
  • 「-O2 に相当する MSVC のオプションは何ですか?」
  • 「/MT と /MD のどちらを使えばよいですか?」
  • 「cl.exe の代わりに clang-cl を使うにはどうすればよいですか?」
  • 「Windows で LNK エラーが発生しています」
  • 「PDB ファイルを生成するにはどうすればよいですか?」

ワークフロー

1. 環境を設定する

MSVC では Visual Studio の環境変数が必要です。開発者コマンド プロンプトを使うか、手動で設定します。

REM x64 native
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"

REM x86 cross (host x64, target x86)
"...\vcvarsamd64_x86.bat"

REM Check compiler version
cl /?

CMake では、「Visual Studio 17 2022」ジェネレーターを使うか、-DCMAKE_GENERATOR="Visual Studio 17 2022" を渡します。

2. オプションの変換:GCC → MSVC
GCC/ClangMSVC cl.exe備考
-O0/Odデバッグ用、最適化なし
-O1/O1サイズを最小化
-O2/O2速度を最大化
-O3/Ox完全な最適化
-Os/Osサイズを優先
-g/ZiPDB デバッグ情報
-g (埋め込み)/Z7オブジェクトファイル内のデバッグ情報
-Wall/W3 または /W4警告レベル
-Werror/WX警告をエラーとして扱う
-std=c++17/std:c++17標準の選択
-DFOO=1/DFOO=1プリプロセッサの定義
-I path/I pathインクルードパス
-c/cコンパイルのみ(リンクなし)
-o out/Fe:out.exe または /Fo:out.obj出力ファイル
-shared/LDDLL をビルド
-fPIC(Windows では暗黙)Windows では不要
-flto/GL (コンパイル) + /LTCG (リンク)プログラム全体の最適化
3. ランタイムライブラリの選択

Windows で LNK エラーが発生する最も一般的な原因です。

オプションランタイム用途
/MDMSVCRT.dll (動的)リリース、DLL リンク(推奨されるデフォルト)
/MDdMSVCRTd.dll (デバッグ動的)デバッグビルド
/MT静的 CRT単独実行ファイル。DLL との混在は避けてください
/MTd静的 CRT デバッグデバッグ + 静的

ルール: リンク時に使用するすべてのオブジェクトとライブラリで、同じランタイムを使う必要があります。/MT と /MD を混在させると、LNK2038: mismatch detected が発生します。

4. clang-cl

clang-cl は Clang の MSVC 互換ドライバーです。cl.exe 形式のオプションを受け付け、ほとんどの MSBuild/CMake プロジェクトで cl.exe の代わりに使用できます。

REM Install: part of LLVM Windows release or VS "LLVM" component

REM Basic usage (MSVC-style flags)
clang-cl /O2 /std:c++17 /MD src.cpp /Fe:prog.exe

REM Pass Clang-native flags with /clang:
clang-cl /O2 /clang:-Rpass=inline src.cpp /Fe:prog.exe

REM Use in CMake
cmake -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl ..

MSVC STL との互換性に必要な Clang の最小バージョンは Clang 8 です。MSVC STL で C++20 の機能を使う場合は Clang 14 以降が必要です。

出典:https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild

5. PDB ファイルとデバッグ
REM Compile with /Zi (external PDB) and /Fd (PDB name)
cl /Zi /Fd:prog.pdb /O2 src.cpp /link /DEBUG

REM /Z7: debug info embedded in .obj (no separate PDB for objects)
cl /Z7 /O2 src.cpp /link /DEBUG /PDB:prog.pdb

WinDbg または VS デバッガーを使う場合は、PDB が実行ファイルと同じ場所にあることを確認するか、シンボルパスを設定してください。

6. よくある LNK エラー
エラー原因修正方法
LNK2019: unresolved external.lib が不足しているプロジェクト設定または /link foo.lib でライブラリを追加する
LNK2038: mismatch detected for 'RuntimeLibrary'/MT と /MD の混在すべてを /MD または /MT に統一する
LNK1104: cannot open file 'foo.lib'ライブラリが検索パスにない/LIBPATH: または LIB 環境変数でパスを追加する
LNK2005: already defined定義が重複している__declspec(selectany) を使うか、定義の重複を確認する
LNK4098: defaultlib 'LIBCMT' conflictsランタイムの不一致/NODEFAULTLIB:LIBCMT を明示的に渡すか、ランタイムを統一する
7. 便利な cl.exe オプション
REM Preprocessed output
cl /P src.cpp       # produces src.i

REM Assembly output
cl /FA /O2 src.cpp  # produces src.asm (MASM syntax)
cl /FAs             # interleave source + asm

REM Show include files
cl /showIncludes src.cpp

REM Compiler version
cl /?  2>&1 | findstr /i "version"

オプションの詳細については、references/flags.md を参照してください。

関連スキル

  • clang-cl の Clang ネイティブ診断には skills/compilers/clang を使います
  • Windows での CMake ツールチェーン設定には skills/build-systems/cmake を使います
  • MSVC でビルドしたバイナリのデバッグには skills/debuggers/lldb または WinDbg を使います

コメント