К основному содержанию
скилл CX Codex

msvc-cl — скилл для Claude Code: сборка C/C++ под Windows

Подсказывает агенту, как компилировать C и C++ через MSVC cl.exe и clang-cl: флаги, рантайм, PDB, ошибки линковки.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill msvc-cl -a claude-code
Открыть на GitHub

Что делает 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-code

2Вручную: положить файлы

~/.claude/skills/msvc-cl/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/msvc-cl/

По шагам, с командами для каждой платформы: Как установить скилл в 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

Похожие скиллы

Все скиллы по теме «Языки программирования» →
qt-cmake-project qt-ai-skills Скилл собирает и правит CMake для проектов на Qt 6: цели, QML-модули, ресурсы. Пригодится, когда агент путает команды Qt 5 и Qt 6. CX Codex +1 530установок ntwarden-windows-analysis-toolkit reason-machines Скилл для разбора внутренностей Windows: процессы, службы, сеть, ETW, ядро. Пригодится, когда нужно разобрать поведение подозрительного процесса. CX Codex +1 443установок avast-premium-security-analysis reason-machines Скилл для изучения компонентов Avast Premium Security и приёмов антивирусной защиты. Пригодится, если разбираете архитектуру защитного софта в изолированной среде. CX Codex +1 1 100установок clr-activation-debugging dotnet Скилл читает логи активации CLR от mscoree.dll и показывает, какую версию рантайма выбрал шим и на каком шаге выбор сломался. CX Codex +1 3 400установок bazel-build-optimization Seth Hobson Скилл помогает настраивать Bazel для монорепозиториев, удалённого выполнения и кэширования. Подойдёт для разбора проблем сборки и ускорения пайплайна. CX Codex 10 300установок including-generated-files dotnet Помогает подключить файлы, созданные во время сборки, к компиляции или выходным данным MSBuild. Нужен, когда созданный файл не подхватывается автоматически. CX Codex +1 3 400установок

Из того же набора62

elf-inspection Ведёт агента по readelf, objdump, nm и ldd: зависимости, символы, секции, отладочная информация и ошибки линковки. CX Codex +1 640установок linux-kernel-modules Ведёт агента по написанию и отладке загружаемых модулей ядра Linux: Kbuild, параметры модуля, /proc, sysfs, символьные устройства, KGDB и ftrace. CX Codex +1 639установок memory-model Скилл для работы с моделью памяти C++ и Rust: подсказывает, какой memory order выбрать, и разбирает гонки данных в атомиках. CX Codex +1 634установок heaptrack Ведёт агента по heaptrack: запись трасс аллокаций, разбор через heaptrack_print, поиск утечек и сравнение запусков. CX Codex +1 623установок linkers-lto Скилл для настройки линкеров GNU ld, gold и lld, разбора ошибок порядка библиотек и включения LTO в реальных проектах. CX Codex +1 608установок binutils Скилл для работы с бинарниками: статические библиотеки, strip, objcopy, addr2line, strings и c++filt. Пригодится, когда агент должен сам разобраться с постобработкой ELF. CX Codex +1 608установок dynamic-linking Скилл для работы с динамической линковкой в Linux: разбирает ошибки загрузки .so, настройку RPATH и RUNPATH, версионирование soname. CX Codex +1 600установок rust-profiling Скилл для анализа производительности Rust: флеймграфы, размер бинарника, раздувание мономорфизации и микробенчмарки Criterion. CX Codex +1 586установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой