| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11480 人关注过本帖, 2 人收藏
标题:vs的命令行环境和编译程序的方法介绍
取消只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
结帖率:100%
收藏(2)
已结贴  问题点数:100 回复次数:7 
vs的命令行环境和编译程序的方法介绍
下面以vs2012为例,介绍其附带的命令行开发环境的使用方法。

首先安装vs2012,然后在开始菜单选择【vs2012开发人员命令提示】,将进入如下cmd窗口:
图片附件: 游客没有浏览图片的权限,请 登录注册


在磁盘上创建一个编程目录,比如F:\test,进入这个目录,并键入一个程序代码:
图片附件: 游客没有浏览图片的权限,请 登录注册

注:^Z可通过按键盘F6键输入,或直接按Ctrl+Z,这个就是常说的“文件结束符”。

这个时候,已经创建了一个名为test1.cpp的源代码文件,下面是编译和运行过程:
图片附件: 游客没有浏览图片的权限,请 登录注册



[ 本帖最后由 TonyDeng 于 2014-12-15 23:13 编辑 ]
搜索更多相关主题的帖子: 源代码 键盘 开发 源代码 键盘 开发 
2014-12-15 23:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
爱用命令行简单环境的,可以在这里尽情发挥。看我上面连编辑器都不用,直接在控制台上输入程序代码的方法!有人以为用记事本或别的什么编辑器很牛,总之就是不用IDE,照这逻辑,我连编辑器都不用,不比你更牛?不是这样比较的。

btw: 在cmd窗口中执行程序,不用在末尾附加诸如system("Pause")或getchar()之类的东西,窗口不会一闪即逝,那是在IDE下调试程序时用的(其实绝大多数时候都不需要,因为一般程序总有一个循环等待用户交互再结束的,参照我发的求解一元二次方程的代码,那里本身有一个循环)。


[ 本帖最后由 TonyDeng 于 2014-12-15 23:51 编辑 ]

授人以渔,不授人以鱼。
2014-12-15 23:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实所谓的命令行环境,不过是普通的cmd窗口,它只是设置了如下所示的搜索环境(environment):

程序代码:
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\TonyD_000\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files
CommonProgramW6432=C:\Program Files\Common Files
COMPUTERNAME=HASEE
ComSpec=C:\WINDOWS\system32\cmd.exe
DevEnvDir=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\
ExtensionSdkDir=C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ExtensionSDKs
FP_NO_HOST_CHECK=NO
Framework35Version=v3.5
FrameworkDir=C:\WINDOWS\\Framework\
FrameworkDIR32=C:\WINDOWS\\Framework\
FrameworkVersion=v4.0.30319
FrameworkVersion32=v4.0.30319
FSHARPINSTALLDIR=C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\
HOMEDRIVE=C:
HOMEPATH=\Users\TonyD_000
INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE;C:\Program Files (x86)\Windows Kits\8.0\include\shared;C:\Program Files (x86)\Windows Kits\8.0\include\um;C:\Program Files (x86)\Windows Kits\8.0\include\winrt;
LIB=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86;
LIBPATH=C:\WINDOWS\\Framework\v4.0.30319;C:\WINDOWS\\Framework\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Windows Kits\8.0\References\CommonConfiguration\Neutral;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0\ExtensionSDKs\Microsoft.VCLibs\11.0\References\CommonConfiguration\neutral;
LOCALAPPDATA=C:\Users\TonyD_000\AppData\Local
LOGONSERVER=\\MicrosoftAccount
NUMBER_OF_PROCESSORS=4
OS=Windows_NT
Path=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files (x86)\Microsoft SDKs\F#\3.0\Framework\v4.0\;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSTSDB\Deploy;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools;C:\WINDOWS\\Framework\v4.0.30319;C:\WINDOWS\\Framework\v3.5;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCPackages;C:\Program Files (x86)\HTML Help Workshop;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Performance Tools;C:\Program Files (x86)\Windows Kits\8.0\bin\x86;C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files (x86)\Microsoft \ Web Pages\v1.0\;C:\Program Files (x86)\Windows Kits\8.0\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=2a07
ProgramData=C:\ProgramData
ProgramFiles=C:\Program Files
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files
PROMPT=$P$G
PSModulePath=C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC=C:\Users\Public
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\Users\TONYD_~1\AppData\Local\Temp
TMP=C:\Users\TONYD_~1\AppData\Local\Temp
USERDOMAIN=HASEE
USERDOMAIN_ROAMINGPROFILE=HASEE
USERNAME=TonyD_000
USERPROFILE=C:\Users\TonyD_000
VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\
VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\
windir=C:\WINDOWS
WindowsSdkDir=C:\Program Files (x86)\Windows Kits\8.0\
WindowsSdkDir_35=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\
WindowsSdkDir_old=C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\


这个环境不单是编译C/C++程序的,也可以编译C#和程序的。

授人以渔,不授人以鱼。
2014-12-15 23:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
请留意1楼第3幅图,在键入cl启动编译程序编译时,又自动启动了Linker链接程序,即C/C++程序的编译是要经过两个阶段的,第一是编译,把文本型的源代码编译为目标代码.obj文件,第二调用链接器把所有.obj和.lib拼合为可执行文件.exe。当我们编写多模块文件程序时,将有多个.cpp源代码,编译器是逐一把这些.cpp编译为对应的.obj,然后再用Linker把这些.obj和需要用到的.lib库拼合。所以,“编译器”实际上仅是编译,缺了链接,程序是无法执行的(通常报告某某库函数没找到、某某变量却定义之类,就是链接阶段的错误)。

程序编译并链接成功后,是脱离IDE和开发环境独立运行的,不需再附带vs,一般把编译得到的.exe文件复制出去即可(前提是运行的机器有对应版本的C/C++运行时库DLL)。

授人以渔,不授人以鱼。
2014-12-15 23:36
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
常见有人说vs只是IDE什么之类,其实是他们不知道本来有命令行开发环境可用,须知vc是从DOS时代的msc一直发展下来的延续版本的编译器,cl.exe本身就是在命令行使用的,cl Ver6.0、Ver7.0就是和TC/BC齐名于一时的编译器,vs2012是cl Ver17.0,而TC/BC则已经停止发展了,只是一般人少用而已。TC/BC声名大噪,是因为它抛出了IDE,而MSC的编译质量虽然比TC/BC优越但没有IDE,所以那个时候很多人都选择了TC/BC,这也是现在学校仍然推荐和教学TC/BC的原因,因为那些老古董教授就是这样过来的。MSC在Windows大发之后才搞的IDE,那就是原始的VS,最著名的是Ver6.0套装,才彻底击败TC/BC的IDE。


[ 本帖最后由 TonyDeng 于 2014-12-15 23:59 编辑 ]

授人以渔,不授人以鱼。
2014-12-15 23:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
关于HelloWorld程序一点有趣的比较:用printf()写的,其.exe尺寸是56K,改用如下的putchar()版本,则是53K,源代码长了,但机器码却短了,这个尺寸的差异3K,就是printf()函数的规模,编译出来的机器码都占3K,可想而知其源代码有多庞大!

程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char* str = "Hello, world!\n";
    while (*str != '\0')
    {
        putchar(*str++);
    }
    return EXIT_SUCCESS;
}


图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 TonyDeng 于 2014-12-16 00:24 编辑 ]

授人以渔,不授人以鱼。
2014-12-16 00:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
所有IDE,都是调用命令行下的编译程序,使用msc内核的是cl,使用gcc内核的是gcc。IDE只是把编译程序的输出信息输出到IDE窗口中,并没有改变编译的过程。不要把IDE和编译环境混为一谈,Code::Blocks不是编译器,而是一个内嵌某种编译器的IDE,它只是一个综合性的文字编辑器而已。同样,vs的IDE也是一个综合编辑器。

vs是一个“工作室”,Studio就是工作室的意思,所谓工作室,是包含工作所需的一切设施的。当然,有人只想要一张桌面,不要书柜,那确实可以不用工作室,摆地摊就可以了。

授人以渔,不授人以鱼。
2014-12-16 13:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
《C++ Primer》的摘页:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


授人以渔,不授人以鱼。
2015-01-03 17:29
快速回复:vs的命令行环境和编译程序的方法介绍
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016515 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved