Msvc Cl

mohitmishra786/low-level-dev-skills/skills/compilers/msvc-cl

by mohitmishra786bdc58472fa9fNo license253 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated 3 months ago

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.

Instructions onlySoftware Development
AI-generated overview

Guides agents through Windows C/C++ compilation with MSVC cl.exe and clang-cl, including flags, runtimes and linker errors.

What it does
This skill provides reference guidance for compiling C and C++ on Windows using MSVC cl.exe and clang-cl. It covers environment setup with vcvars scripts, translating GCC/Clang flags to MSVC equivalents, choosing between /MT and /MD runtime libraries, generating PDB debug information, and diagnosing common LNK errors. It also includes a reference file with additional flag details.
When to use it
Use it when configuring Visual Studio, MSBuild or CMake builds on Windows, or when replacing cl.exe with clang-cl. It is also useful when resolving MSVC-specific compile or link errors such as runtime library mismatches.
Requirements
No scripts are included; it is instructions and a reference document only. It assumes access to a Windows environment with Visual Studio or LLVM/clang-cl installed, and the agent may need to run vcvars scripts or compiler commands.

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 versioncl /?

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.

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 CMakecmake -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

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

cmd
REM Preprocessed outputcl /P src.cpp       # produces src.i
REM Assembly outputcl /FA /O2 src.cpp  # produces src.asm (MASM syntax)cl /FAs             # interleave source + asm
REM Show include filescl /showIncludes src.cpp
REM Compiler versioncl /?  2>&1 | findstr /i "version"

For flag details, see references/flags.md [blocked].

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

Source and attribution

Source:mohitmishra786/low-level-dev-skillsinskills/compilers/msvc-clat commitbdc5847

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal