Windows下通过命令行编译C/C++程序

时间:2021-06-01 14:29:54

参考 http://blog.sina.com.cn/s/blog_7741c2f70101io0s.html
第一次用Markdown编辑器写博客,以前都是用Html编辑器写的。这次尝试一下Markdown,感觉效果不错,格式化代码的方式也很简洁。

      由于在Linux上可以使用命令行,通过gcc命令编译C/C++程序。因此就想是否在windows上也可以通过命令行来编译C/C++程序。
      网上有说,在windows下安装一个cygwin,然后就可以用gcc命令编译了,可是这样太麻烦了。然后我想VC6.0和Vistual Studio不是也可以编译C/C++文件的吗?虽然它们是图形化界面的方式,可是背后也一定是用命令行方式编译的。

当前环境 Win10 x64 & Vistual Studio 2015

      首先,在桌面(我的目录是C:\Users\Administrator\Desktop\test.cpp)上新建一个文本文件,改名为test.cpp。test.cpp的内容如下:

#include <iostream>
using namespace std;
int main()
{
cout<<"hello world!"<<endl;
return 0;
}

我机子上安装的VS2015,vs2015的VC的bin目录下有个cl.exe就是负责编译C/C++程序的,位置如下:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin

VC的include目录如下:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include

VC的lib目录如下:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib

直接在CMD下键入以下命令

set path=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
set include=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
set lib=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib

      这些设置仅在该CMD环境下有效,它并不会永久改变系统环境变量,只是临时改变而已。所以并不用太担心。

通过set命令可以查看当前配置的环境变量,如下:
Windows下通过命令行编译C/C++程序

进入test.cpp的目录,并运行 “cl test.cpp” 命令,报错:fatal error C: 无法打开包括文件: “corecrt.h”: No such file or directory
Windows下通过命令行编译C/C++程序

参考这篇博客http://blog.csdn.net/x356982611/article/details/51140807
进入C:\Program Files (x86)\Windows Kits\10\Include目录
Windows下通过命令行编译C/C++程序

我这里是找到其中最新版的点进去,进入到C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt目录,corecrt.h文件如下:
Windows下通过命令行编译C/C++程序

修改环境变量,添加ucrt目录

set include=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include;C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt

再次执行 “cl test.cpp” 命令,结果还是出错:LINK: fatal error LNK1104: 无法打开文件“uuid.lib”
Windows下通过命令行编译C/C++程序

参考这篇博客http://www.cnblogs.com/CHN-William/archive/2012/12/27/2835578.html,进入到C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib目录,果然发现Uuid.Lib
Windows下通过命令行编译C/C++程序

修改环境变量,添加该目录

set lib=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib

再次执行 “cl test.cpp” 命令,结果还是出错:LINK: fatal error LNK1104: 无法打开文件 “libucrt.lib”
Windows下通过命令行编译C/C++程序

进入C:\Program Files (x86)\Windows Kits\10\Lib目录
Windows下通过命令行编译C/C++程序
找最新版的文件夹,进入C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64目录,发现“libucrt.lib”文件
Windows下通过命令行编译C/C++程序
这里说明一下,有d后缀的lib文件是Debug版本的,没有的是Release版本的,最明显的区别就是Release版的删除了Debug版本中诸如断点等调试信息,并且进行了代码优化,因此通常Release版本的都会比Debug版本的文件小。

修改环境变量,添加该目录

set lib=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x64

再次执行 “cl test.cpp” 命令,依然报错:libucrt.lib(exp21.obj) : fatal error LNK1112: 模块计算机类型“x64”与目标计算机类型“x86”冲突
Windows下通过命令行编译C/C++程序
但是扯淡的是为这里就是64位的Win10啊,当初是64位的Win7,用腾讯Win10装机助手升上去的。
Windows下通过命令行编译C/C++程序

修改环境变量,改为x86

set lib=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x86

执行成功,/out:test.exe test.obj
Windows下通过命令行编译C/C++程序
在输出目录下就生成了相应的 .obj 和 .exe 文件了。
Windows下通过命令行编译C/C++程序
执行test.exe,可以在CMD中看到相应的输出
Windows下通过命令行编译C/C++程序

经过这一次的反复百度,我得出一个经验:网上的博文大多都是Out,而且大家都是复制粘贴还写自己原创,所以一堆一样的资料,而且是不能运行的。所以以后看到网上的资料,一定要亲自试一下,并标注当时的环境才可信。