用途:指导在 Windows 上用 C/C++ 编译器构建项目,涵盖 MSVC cl.exe、作为 MSVC 兼容驱动的 clang-cl、MSBuild 项目设置以及运行时库选择。
触发场景:命令行怎么用 MSVC 编译;MSVC 中 -O2 的等价选项;/MT 与 /MD 如何取舍;如何用 clang-cl 替代 cl.exe;Windows 上的 LNK 错误;如何生成 PDB 文件。
使用方式:先配置环境,使用 Developer Command Prompt 或手动运行 vcvars 脚本,例如 x64 原生为 "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat",x86 交叉为 vcvarsamd64_x86.bat,然后用 cl /? 检查版本;CMake 中可用 "Visual Studio 17 2022" 生成器。常见 GCC 到 MSVC 的选项对应:-O0→/Od、-O2→/O2、-O3→/Ox、-g→/Zi、-Wall→/W3 或 /W4、-Werror→/WX、-std=c++17→/std:c++17、-D→/D、-I→/I、-c→/c、-o→/Fe: 或 /Fo:、-shared→/LD、-flto→/GL 加 /LTCG。运行时库:/MD 动态、/MDd 调试动态、/MT 静态、/MTd 调试静态,同一链接中的所有对象与库必须使用同一运行时,混用会报 LNK2038。clang-cl 接受 cl.exe 风格选项,基本用法如 clang-cl /O2 /std:c++17 /MD src.cpp /Fe:prog.exe,可用 /clang: 传入 Clang 原生选项,CMake 中通过 -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl 指定;与 MSVC STL 兼容建议 Clang 8+,C++20 特性建议 Clang 14+。
调试:用 /Zi 生成外部 PDB 并可配合 /Fd 指定名称,/Z7 把调试信息嵌入 .obj,链接时用 /DEBUG。
常见 LNK 错误:LNK2019 未解析外部符号、LNK2038 运行时库不匹配、LNK1104 找不到库文件、LNK2005 重复定义、LNK4098 默认库冲突,需分别补齐库、统一运行时、添加 /LIBPATH: 或检查重复定义。
其它选项:/P 输出预处理、/FA 输出汇编、/FAs 源码与汇编交错、/showIncludes 显示头文件。详细选项见 references/flags.md。相关技能包括 compilers/clang、build-systems/cmake、debuggers/lldb 或 WinDbg。