L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Design et création · SKILL.md

msvc-cl

msvc-cl

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,…

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

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:

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/ClangMSVC cl.exeNotes
-O0/OdDebug, no optimisation
-O1/O1Minimise size
-O2/O2Maximise speed
-O3/OxFull optimisation
-Os/OsFavour size
-g/ZiPDB debug info
-g (embedded)/Z7Debug info in object file
-Wall/W3 or /W4Warning level
-Werror/WXWarnings as errors
-std=c++17/std:c++17Standard selection
-DFOO=1/DFOO=1Preprocessor define
-I path/I pathInclude path
-c/cCompile only (no link)
-o out/Fe:out.exe or /Fo:out.objOutput file
-shared/LDBuild 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.

FlagRuntimeUse case
/MDMSVCRT.dll (dynamic)Release, DLL linkage (recommended default)
/MDdMSVCRTd.dll (debug dynamic)Debug builds
/MTStatic CRTStandalone exe; avoid mixing with DLLs
/MTdStatic CRT debugDebug + 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.

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

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

ErrorCauseFix
LNK2019: unresolved externalMissing .libAdd library in project settings or /link foo.lib
LNK2038: mismatch detected for 'RuntimeLibrary'Mixed /MT and /MDUnify all to /MD or /MT
LNK1104: cannot open file 'foo.lib'Library not in search pathAdd path via /LIBPATH: or LIB env var
LNK2005: already definedMultiple definitionsUse __declspec(selectany) or check for duplicate definitions
LNK4098: defaultlib 'LIBCMT' conflictsRuntime mismatchExplicitly pass /NODEFAULTLIB:LIBCMT or unify runtimes

7. Useful cl.exe flags

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.

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
Skills enregistrées