C/C++入门(一):从命令行运行编译器

时间:2024-04-11 20:46:57

最近接触的代码都是C++大工程,难免心里有点虚,所以还是决定先从基本的学起,捧起厚厚的C++ Primer(使用C++11标准),一点一点积累,争取摆脱菜鸡行列吧。

今天学了一下如何从命令行运行编译器,作出以下总结和演示。

一、从命令行运行编译器

如果使用命令行界面,通常是在一个控制台窗口内(例如UNIX系统中的外壳程序窗口或者Windows系统中的命令提示符窗口)编译程序。假如main程序保存在文件prog1.cpp(不同编译器使用不同的后缀命名约定,最常见的有.cc,.cxx,.cpp,.cp,.C等)中,可以用以下命令来对其进行编译:
$ CC prog1.cpp
其中CC是编译器程序的名字(在不同操作和编译器系统中,运行C++编译器的命令各不相同。默认情况下,运行GNU编译器的命令是g++,运行微软Visual Studio 2010或2017编译器的命令为cl),$是系统提示符。执行完上面这条命令后编译器会生成一个可执行文件,其中Windows系统会将这个可执行文件命名为prog1.exe,UNIX系统中的编译器会将这个可执行文件命名为a.out。

二、运行GNU或微软编译器

1.运行GNU编译器命令

运行GNU编译器的命令是g++:

$ g++ -o prog1 prog1.cpp

其中-o prog1是编译器参数,指定了可执行文件的文件名。注意在UNIX系统中,可执行文件没有后缀,在Windows系统中,后缀为.exe。如果忽略了-o prog1参数,在UNIX系统中编译器会生成一个名为a.out的可执行文件,在Windows系统中则会生成一个名为a.exe的可执行文件。

2.运行MSVS2017(Microsoft Visual Studio 2017 )编译器命令

运行VS2017编译器的命令为cl:

$ cl /EHsc prog1.cpp

此处命令cl调用编译器,/EHsc 是编译器选项,用来打开标准异常处理。微软编译器会自动生成一个可执行文件,其名字与第一个源文件名对应。可执行文件的文件名与源文件名相同,后缀名为.exe。

三、运行可执行文件

1.在Windows系统中运行一个可执行文件

需要提供可执行文件的文件名,可以忽略其扩展名.exe;

$ prog1

在一些系统中,即使文件就在当前目录或文件夹中,也必须显式指出文件的位置,在此情况下,可以键入:

$ .\prog1

"."后跟一个反斜杠指出该可执行文件在当前目录中

2.在UNIX系统中运行一个可执行文件

在UNIX系统中运行一个可执行文件需要使用全文件名,包括文件扩展名:

$ a.out

如果需要指定文件位置,需要用一个"."后跟一个斜杠来指出可执行文件的位置:

$ ./a.out

访问main的返回值的方法依赖于系统。在UNIX和Windows系统中,执行完一个程序后,都可以通过echo命令获得其返回值。

在UNIX系统中,通过如下命令获得状态:

$ echo $?

在Windows系统中,通过如下命令获得状态:

$ echo %ERRORLEVEL%

四、Windows系统下进行操作演示

1.首先在桌面新建个txt文档,输入要执行的源代码,然后保存重命名为“hello-dhq.cpp”
接着在Windows自带的命令提示符界面进行操作,写上以下命令行:

cl C:\Users\dhq\Desktop\hello-dhq.cpp

出现如下提示:
C/C++入门(一):从命令行运行编译器
这时参照该博客在Path系统变量中添加相应的环境变量D:\VS2017\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x86,再次运行出现情况如下:
C/C++入门(一):从命令行运行编译器
这说明cl工具路径设置成功,但是出现“stdio.h:不包括路径集”的提示,这表明找不到stdio.h,这时需要配置环境变量:计算机右键打开属性,进入控制面板系统页,选择高级系统设置->环境变量->系统变量
添加INCLUDE和LIB两个环境变量,并分别为其添加变量值,如下图:
C/C++入门(一):从命令行运行编译器
C/C++入门(一):从命令行运行编译器
添加完之后再次运行得到如下情况(真是曲折啊~):
C/C++入门(一):从命令行运行编译器
这下我就不得不怀疑我的include文件夹下没有stdio.h这个头文件,一找,果然没有(裂开)。哎,找个stdio.h复制到include文件夹不知道有没有用,嗯说干就干!我在D:\Windows Kits\10\Include\10.0.17763.0\ucrt路径中找到了stdio.h将其复制到了VS2017的include文件夹下,虽然添加了stdio.h后还会出现一些error提示,不过按照提示的来复制D:\Windows Kits\10\Include\10.0.17763.0\ucrt下的相应的头文件到include文件夹下就可以了,之后出现如下情况:
C/C++入门(一):从命令行运行编译器
生成了hello-dhq.exe可执行文件(谢天谢地,真怀疑我当时装VS2017是不是漏了很多东西)但是有报错说无法打开一个库文件kernel32.lib,那我就去D:\Windows Kits\10\Lib\10.0.17763.0\um\x86找了复制到VS2017的lib的x86文件夹下,再次运行说libucrt.lib找不到,我就去D:\Windows Kits\10\Lib\10.0.17763.0\ucrt\x86找了复制到lib的x86文件夹下,再次运行说uuid.lib无法打开,我就去D:\Windows Kits\10\Lib\10.0.17763.0\um\x86下找了复制到lib的x86文件夹下,再次运行,这下,可没再报啥错了!!!!.exe和.obj文件都正常生成,亏我肯陪它玩儿这么久~
C/C++入门(一):从命令行运行编译器
接下来试试运行一下这个hello-dhq.exe可执行文件,按照上面第三大部分的第一点说的那样在系统提示符下输入:hello-dhq.exe或者hello-dhq(省略了扩展名),结果总算是正常啦嘿嘿嘿~
C/C++入门(一):从命令行运行编译器
C/C++入门(一):从命令行运行编译器

其实除了上述方法在Windows自带的命令提示符界面进行操作以外,还有一种方法可以借鉴,也就是在命令行中执行MSVC自带的环境配置工具VsDevCmd.bat,具体的参考此博客

2.除了在Windows自带的命令提示符下运行命令行以外,还可以在开始菜单下vs2017的开发人员命令提示符中(如下图,看不太清楚)输入命令:
C/C++入门(一):从命令行运行编译器
然后输入命令行cl /EHsc C:\Users\dhq\Desktop\hello-world.cpp,很快就成功了!!!
C/C++入门(一):从命令行运行编译器
运行一下生成的hello-world.exe可执行文件试试:
C/C++入门(一):从命令行运行编译器
Perfect,比上面那种方法简单多了!!!!