【使用命令行编译 C/C++ 程序的完整指南】

官网参看链接:
编译器选项
演练:在命令行上编译 C 程序
CL 调用链接器

使用命令行编译 C/C++ 程序的完整指南(结合 cl.exelink.exe 详解)

在本博客中,我们将深入介绍如何使用 Microsoft Visual C++ 编译器(cl.exe)和链接器(link.exe)在命令行编译 C/C++ 程序。我们将从基础的程序编写到对象文件(.obj)的生成,再到最终可执行文件(.exe)的生成,帮助你掌握完整的编译和链接过程。


cl.exelink.exe 简介

cl.exeMicrosoft Visual C++ 编译器的命令行工具,它将 C 和 C++ 源代码编译为 通用对象文件格式 (COFF) 对象文件(.obj)。接下来,链接器link.exe)会将这些对象文件合并成一个可执行文件(.exe)或动态链接库(.dll)。

编译器和链接器的作用分别是:

  • 编译cl.exe 将源代码编译为对象文件(.obj 文件),cl.exe 自动调用 link.exe,将对象文件与必要的库文件链接,生成可执行文件(.exe)
  • 链接link.exe 将这些对象文件与库文件一起链接,生成最终的可执行文件或动态链接库。

编译 C/C++ 程序的先决条件

在使用 cl.exelink.exe 前,你需要安装 Visual StudioVisual Studio Build Tools,并选择“C++ 桌面开发”工作负载。以下是详细步骤:

1. 下载和安装

  • 访问 Visual Studio 官网,下载 Visual Studio 或者 Visual Studio Build Tools 以支持命令行编译。
  • 安装过程中,选择“使用 C++ 进行桌面开发”工作负载。这将确保你有必要的编译器、链接器和库文件。

2. 打开开发人员命令提示窗口

安装完成后,打开 开发人员命令提示窗口,这是一个配置好的命令行环境,允许你使用 cl.exelink.exe

打开步骤:
  1. 点击 Windows 开始菜单,找到 Visual Studio 2022 文件夹。
  2. 选择“VS 2022 开发人员命令提示”以打开命令行工具。

在命令提示符中输入以下命令,确认编译器配置正确:

cl

如果一切正常,应该会看到如下输出:

Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86

编写和编译第一个 C/C++ 程序

接下来,我们将编写一个简单的 C 程序,并展示如何使用 cl.exe 编译和使用 link.exe 进行链接。

在开发人员命令提示窗口中,输入 cd c:\ 以将当前工作目录更改为 C: 驱动器的根目录。接下来,输入 md c:\hello 以创建目录,然后输入 cd c:\hello 以更改为该目录。此目录将保存源文件和编译的程序。

1. 编写源文件

在命令提示符中使用 notepad 创建一个 C 源文件:

notepad hello.c

在记事本中输入以下代码:

#include <stdio.h>

int main() {
    printf("Hello, World! This is a C program compiled and linked via command line.\n");
    return 0;
}

保存文件并关闭记事本。

2. 使用 cl.exe 编译源文件

现在,在命令行中使用 cl.exe 编译源文件:

cl hello.c

这个命令会自动进行编译和链接。编译器会将 hello.c 编译为对象文件(hello.obj),然后使用 link.exe 链接生成可执行文件 hello.exe

你将看到类似以下的编译输出:

Microsoft (R) C/C++ Optimizing Compiler Version 19.10.25017 for x86

hello.c
Microsoft (R) Incremental Linker Version 14.10.25017.0

/out:hello.exe
hello.obj

3. 运行生成的可执行文件

编译和链接成功后,你可以通过以下命令运行 hello.exe

hello

输出应该是:

Hello, World! This is a C program compiled and linked via command line.

编译与链接的分步操作

在较大的 C++ 项目中,通常会将编译和链接分为两个步骤,特别是当有多个源文件时。

1. 只编译,不链接

如果你希望将编译与链接过程分开,可以使用 /c 选项仅生成对象文件(.obj 文件),而不进行链接。

示例:
cl /c hello.c

这个命令会生成 hello.obj,而不会生成可执行文件。

2. 使用 link.exe 进行链接

接下来,使用 link.exe 将生成的 .obj 文件链接为可执行文件:

link hello.obj /out:hello.exe

这会生成 hello.exe,你可以通过运行 hello 命令来验证结果。


多个源文件的编译与链接

在现实项目中,通常包含多个源文件。我们可以使用 cl.exelink.exe 来处理多个对象文件的编译与链接。

1. 编写示例源文件

假设项目有两个源文件:

  • file1.c
  • file2.c

你可以首先单独编译它们:

cl /c file1.c
cl /c file2.c

这会生成 file1.objfile2.obj

2. 链接多个对象文件

接下来,使用 link.exe 链接生成的 .obj 文件:

link file1.obj file2.obj /out:program.exe

这将生成一个名为 program.exe 的可执行文件。


编译选项与优化

cl.exe 提供了丰富的编译选项,可以帮助你控制代码的编译和优化过程。

1. 启用调试信息

使用 /Zi 选项生成调试信息,这样可以在调试器中调试生成的可执行文件:

cl /Zi hello.c

2. 禁用优化以便调试

使用 /Od 选项可以禁用编译优化,确保调试时的行为与源代码一致:

cl /Od hello.c

3. 启用优化以提升性能

使用 /O2/Ox 选项可以启用编译优化,提升代码的执行效率:

cl /O2 hello.c

链接外部库

在某些情况下,你的程序可能依赖于外部库。你可以通过 link.exe 将外部库链接到你的程序中。

1. 编译程序并链接外部库

假设你有一个名为 mylib.lib 的外部库,你可以在链接时将其包括在内:

cl hello.c /link mylib.lib

这会将 mylib.lib 与程序一起链接生成可执行文件。


总结

通过本篇指南,你学习了如何使用 cl.exe 编译 C/C++ 程序,并通过 link.exe 完成对象文件的链接,生成可执行文件。无论是编译单个文件、多个源文件,还是与外部库链接,cl.exelink.exe 都为命令行开发者提供了强大的工具集。

总结:

  • cl.exe 将 C/C++ 源代码编译为对象文件(.obj)。
  • link.exe 将对象文件与库链接,生成可执行文件(.exe)或动态链接库(.dll)。
  • 可以使用 /c 选项分离编译和链接过程,并通过多种优化选项提升程序性能。

希望通过这个完整指南,你能够在命令行中更高效地进行 C/C++ 程序的开发和管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

楚歌again

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值