1.命令行下写程序。
写程序一定要用IDE?
不,我还可以用记事本呢。
呵呵,写程序一定要用记事本??
————————————————
命令行下输入copy con test.txt后回车可在相应目录下创建test.txt文件。
然后你就可以在终端上写了。。。
写完后按下ctrl + z键,回车,输入结束,文件保存。
当然,你也可以copy con test.cpp写程序。
————————————————
2.
CodeBlocks之命令行下完成编译
把xx.cpp文件copy到CodeBlocks文件夹下的MinGW/bin子文件夹下,该子文件下有g++.exe,gcc.exe等可执行程序。在命令行窗口下,g++ xx.cpp就可以了。话说为什么生成的是a.exe呢......因为默认生成的则是a.exe.....可以g++ xx.cpp -o xx则生成xx.exe。更多细节可参考刘汝佳紫书附录A.3 编译器和调试器。
更简单的方法是设置环境变量。在命令提示框(cmd)中输入 path=%path%;C:\MinGW\bin 即可。
命令: g++ Test.cpp
功能:生成默认为a.exe的文件,这个过程包含了编译和链接。
再说下-o命令,-o命令表示输出的意思,gcc/g++命令是非常灵活的,你不指定输出的文件名的时候默认生成的是.exe文件。
你要输出Test.exe的话可以用:g++ -o Test.exe Test.cpp。-o命令是输出的意思,这样就输出了Test.exe。
gcc/g++在执行编译工作的时候,总共需要以下几步:
1.预处理,生成.i的文件[预处理器cpp]
命令:g++ -E Test.cpp > Test.i
功能:输出预处理后的文件,linux下以.i为后缀名。只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。用编辑器打开Test.i会发现有很多很多代码,你只需要看最后部分就会发现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。下面是Test.i文件的最后部分,可以看见宏的替换和注释的消除。
2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]
命令:g++ -S Test.cpp
功能:会生成Test.s文件,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。
3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]
命令:g++ -c Test.cpp
功能:.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。
4.连接目标代码,生成可执行程序[链接器ld]
命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同。
VS之命令行下完成编译
如果你安装有VS,可以启动vs开发人员命令提示,跳到源文件所在目录后,输入cl xx.c即可完成对其的编译。
在cmd窗口中执行程序,不用在末尾附加诸如system("Pause")或getchar()之类的东西,窗口不会一闪即逝,那是在IDE下调试程序时用的(其实绝大多数时候都不需要,因为一般程序总有一个循环等待用户交互再结束的)。
————————————————————————————————————————————————————————
其实所谓的命令行环境,不过是普通的cmd窗口,它只是设置了搜索环境(environment),
该环境不单是编译C/C++程序的,也可以编译C#和VB.NET、ASP.NET程序的。
请留意上图,在键入cl启动编译程序编译时,又自动启动了Linker链接程序,即C/C++程序的编译是要经过两个阶段的,第一是编译,把文本型的源代码编译为目标代码.obj文件,第二调用链接器把所有.obj和.lib拼合为可执行文件.exe。当我们编写多模块文件程序时,将有多个.cpp源代码,编译器是逐一把这些.cpp编译为对应的.obj,然后再用Linker把这些.obj和需要用到的.lib库拼合。所以,“编译器”实际上仅是编译,缺了链接,程序是无法执行的(通常报告某某库函数没找到、某某变量却定义之类,就是链接阶段的错误)。
程序编译并链接成功后,是脱离IDE和开发环境独立运行的,不需再附带vs,一般把编译得到的.exe文件复制出去即可(前提是运行的机器有对应版本的C/C++运行时库DLL)。
常见有人说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。
关于HelloWorld程序一点有趣的比较:用printf()写的,其.exe尺寸是56K,改用如下的putchar()版本,则是53K,源代码长了,但机器码却短了,这个尺寸的差异3K,就是printf()函数的规模,编译出来的机器码都占3K,可想而知其源代码有多庞大!
所有IDE,都是调用命令行下的编译程序,使用msc内核的是cl,使用gcc内核的是gcc。IDE只是把编译程序的输出信息输出到IDE窗口中,并没有改变编译的过程。不要把IDE和编译环境混为一谈,Code::Blocks不是编译器,而是一个内嵌某种编译器的IDE,它只是一个综合性的文字编辑器而已。同样,vs的IDE也是一个综合编辑器。
vs是一个“工作室”,Studio就是工作室的意思,所谓工作室,是包含工作所需的一切设施的。当然,有人只想要一张桌面,不要书柜,那确实可以不用工作室,摆地摊就可以了。