MSVC命令行编译

MSVC 的sln工程,可以用devenv.com/exe 调用编译 .

对于C++/C 的编译工具链主要是:

  • cl.exe
  • linker.exe

cl.exelinker.exe 的命令行参数和使用可参考说明文档:

微软官网 : 编译器命令行语法

微软官网 : MSVC-CL 命令行参数

简单实例

命令格式: CL [option...] file... [option | file]... [lib...] [@command-file] [/link link-opt...]

选项解释
option一个或多个 CL 选项。 请注意,所有选项都适用于所有指定的源文件。 选项由正斜杠 (/) 或短划线 (-) 指定。 如果选项采用参数,则选项的说明会记录选项和参数之间是否允许有空格。 除了/HELP 选项外) (选项名称不区分大小写。 有关详细信息,请参阅 CL 选项的顺序 。
file一个或多个源文件、.obj 文件或库的名称。 CL 编译源文件,并将 .obj 文件和库的名称传递到链接器。 有关详细信息,请参阅 CL 文件名语法 。
lib一个或多个库名称。 CL 将这些名称传递到链接器。
命令文件包含多个选项和文件名的文件。 有关详细信息,请参阅 CL 命令文件 。
链接-选择一个或多个MSVC 链接器选项。 CL 将这些选项传递到链接器。

CLLINK 执行过程中可以读取环境参数,请参考官方文档。

环境变量说明
LINK 和 _LINK_LINK 工具预置 LINK 环境变量中定义的选项和自变量并在处理之前将 _LINK_ 环境变量中定义的选项和自变量附加到命令行。
LIB在搜索命令行或 /BASE 选项上指定的对象、库或其他文件时,LINK 工具使用 LIB 路径。 它还可使用 LIB 路径查找在对象上命名的 .pdb 文件。 LIB 变量可以包含一个或多个路径规范,用分号分隔。 一个路径必须指向 Visual C++ 安装的 \lib 子目录。
PATH如果该工具需要运行 CVTRES 并在与 LINK 自身相同的目录中找不到文件。 (LINK 需要 CVTRES 链接 .res 文件。) PATH 必须指向 Visual C++ 安装的 \bin 子目录。
TMP用于链接 OMF 或.res 文件时指定目录。

命令文件

cl ... @RESP ...

@RESP 是可以将命令行内容写在文件中,用于减小命令长度, 避免命令行传参过长错误 。

预处理

cl test.cpp /P @RESP /Fi "test.i"

编译

cl test.i /c @RESP /Fo "test.obj"

链接

由 obj (COFF文件) 生成 PE 文件 .

link test.obj @RESP /link XXXX.lib /out:test.exe

生成动态链接库

link /dll @objlist.txt @liblist.txt @exports.txt