msvc-cl — скилл для Claude Code: сборка C/C++ под Windows
Подсказывает агенту, как компилировать C и C++ через MSVC cl.exe и clang-cl: флаги, рантайм, PDB, ошибки линковки.
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a claude-codeЧто делает msvc-cl
Скилл включается, когда в проекте всплывает Windows-сборка: настройка Visual Studio, MSBuild, замена cl.exe на clang-cl. Внутри — таблица перевода флагов GCC и Clang в MSVC, выбор рантайма, работа с PDB и разбор типовых ошибок LNK.
Самый частый источник проблем на Windows — рантайм. Все объектные файлы и библиотеки в одной линковке должны использовать один и тот же вариант: смешение /MT и /MD даёт LNK2038: mismatch detected. В таблице есть и остальные: LNK2019 из-за забытой .lib, LNK1104 при отсутствии пути поиска, LNK4098 при конфликте defaultlib.
Для clang-cl указано, что он принимает флаги в стиле cl.exe и подставляется в CMake через -DCMAKE_C_COMPILER=clang-cl. Совместимость с MSVC STL начинается с Clang 8, а для C++20 нужно Clang 14 и выше. Компилятору нужны переменные окружения Visual Studio — их выставляет vcvars64.bat или Developer Command Prompt.
Какие задачи решает
- перевести флаги GCC в эквиваленты MSVC
- выбрать между
/MTи/MDбез ошибок линковки - настроить clang-cl вместо cl.exe в CMake
- разобрать
LNK2019иLNK2038по коду ошибки - получить PDB для отладки в WinDbg или Visual Studio
Примеры запросов агенту
- Какой флаг MSVC соответствует -O2?
- У меня LNK2038: mismatch detected — что делать?
- Настрой CMake на clang-cl вместо cl.exe
Как установить msvc-cl
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a claude-code2Вручную: положить файлы
~/.claude/skills/msvc-cl/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/msvc-cl/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a codex2Вручную: положить файлы
.agents/skills/msvc-cl/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a cursor2Вручную: положить файлы
.cursor/skills/msvc-cl/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills msvc-cl2Вручную: положить файлы
.github/skills/msvc-cl/SKILL.md1Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a gemini-cli2Командой платформы
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/compilers/msvc-clВручную: положить файлы
.devin/skills/msvc-cl/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Вопросы о msvc-cl
Как установить msvc-cl в Claude?
Выполните npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a claude-code. Файл скилла появится по пути ~/.claude/skills/msvc-cl/SKILL.md.
Что делает msvc-cl?
Проводит агента по компиляции C и C++ под Windows: настройка окружения Visual Studio, перевод флагов GCC и Clang в MSVC, выбор рантайма, генерация PDB и диагностика ошибок LNK.
Какая версия Clang нужна для clang-cl с MSVC STL?
Минимум Clang 8. Для возможностей C++20 с MSVC STL потребуется Clang 14 и выше.
Исходный текст
SKILL.md · MIT
--- name: msvc-cl description: MSVC cl.exe and clang-cl skill for Windows C/C++ projects. Use when configuring Visual Studio builds, MSBuild, or clang-cl as a drop-in MSVC replacement. Covers translating GCC/Clang flags to MSVC equivalents, runtime library selection, Windows SDK setup, and diagnosing MSVC-specific errors. Activates on queries about cl.exe, clang-cl, /O flags, /MT vs /MD, PDB files, Windows ABI, or MSVC project settings. --- # MSVC cl.exe and clang-cl ## Purpose Guide agents through Windows C/C++ compilation: MSVC `cl.exe`, `clang-cl` as MSVC-compatible driver, MSBuild project settings, and runtime library choices. ## Triggers - "How do I compile with MSVC from the command line?" - "What is the MSVC equivalent of `-O2`?" - "/MT vs /MD — which do I use?" - "How do I use clang-cl instead of cl.exe?" - "I'm getting LNK errors on Windows" - "How do I generate PDB files?" ## Workflow ### 1. Set up the environment MSVC requires the Visual Studio environment variables. Use the Developer Command Prompt or set up manually: ```cmd 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 /? ``` In CMake, use the "Visual Studio 17 2022" generator or pass `-DCMAKE_GENERATOR="Visual Studio 17 2022"`. ### 2. Flag translation: GCC → MSVC | GCC/Clang | MSVC cl.exe | Notes | |-----------|-------------|-------| | `-O0` | `/Od` | Debug, no optimisation | | `-O1` | `/O1` | Minimise size | | `-O2` | `/O2` | Maximise speed | | `-O3` | `/Ox` | Full optimisation | | `-Os` | `/Os` | Favour size | | `-g` | `/Zi` | PDB debug info | | `-g` (embedded) | `/Z7` | Debug info in object file | | `-Wall` | `/W3` or `/W4` | Warning level | | `-Werror` | `/WX` | Warnings as errors | | `-std=c++17` | `/std:c++17` | Standard selection | | `-DFOO=1` | `/DFOO=1` | Preprocessor define | | `-I path` | `/I path` | Include path | | `-c` | `/c` | Compile only (no link) | | `-o out` | `/Fe:out.exe` or `/Fo:out.obj` | Output file | | `-shared` | `/LD` | Build DLL | | `-fPIC` | (implicit on Windows) | Not needed on Windows | | `-flto` | `/GL` (compile) + `/LTCG` (link) | Whole program optimisation | ### 3. Runtime library selection This is the most common source of LNK errors on Windows. | Flag | Runtime | Use case | |------|---------|---------| | `/MD` | `MSVCRT.dll` (dynamic) | Release, DLL linkage (recommended default) | | `/MDd` | `MSVCRTd.dll` (debug dynamic) | Debug builds | | `/MT` | Static CRT | Standalone exe; avoid mixing with DLLs | | `/MTd` | Static CRT debug | Debug + static | **Rule:** All objects and libraries in a link must use the same runtime. Mixing `/MT` and `/MD` causes `LNK2038: mismatch detected`. ### 4. clang-cl `clang-cl` is Clang's MSVC-compatible driver. It accepts `cl.exe`-style flags and can replace `cl.exe` in most MSBuild/CMake projects. ```cmd 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 .. ``` Minimum Clang version for MSVC STL compatibility: Clang 8+. For C++20 features with MSVC STL: Clang 14+. Source: <https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild> ### 5. PDB files and debugging ```cmd 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 ``` For WinDbg or VS debugger, ensure the PDB is alongside the executable or set the symbol path. ### 6. Common LNK errors | Error | Cause | Fix | |-------|-------|-----| | `LNK2019: unresolved external` | Missing `.lib` | Add library in project settings or `/link foo.lib` | | `LNK2038: mismatch detected for 'RuntimeLibrary'` | Mixed `/MT` and `/MD` | Unify all to `/MD` or `/MT` | | `LNK1104: cannot open file 'foo.lib'` | Library not in search path | Add path via `/LIBPATH:` or `LIB` env var | | `LNK2005: already defined` | Multiple definitions | Use `__declspec(selectany)` or check for duplicate definitions | | `LNK4098: defaultlib 'LIBCMT' conflicts` | Runtime mismatch | Explicitly pass `/NODEFAULTLIB:LIBCMT` or unify runtimes | ### 7. Useful cl.exe flags ```cmd 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" ``` For flag details, see [references/flags.md](references/flags.md). ## Related skills - Use `skills/compilers/clang` for clang-cl's Clang-native diagnostics - Use `skills/build-systems/cmake` for CMake toolchain configuration on Windows - Use `skills/debuggers/lldb` or WinDbg for debugging MSVC-built binaries
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills