从零开始教你手动编译源码

0x00:起因

社团的同学看《C Primer Plus》第八章时,对其中重定向部分的内容无法理解,作为一直使用IDE(主要是CodeBlocks)的新手,也不知道应当如何动手做实验。在帮忙解决问题(主要是教会如何手动编译文件)的过程中,我意识到这是许多新手学习中的共有问题,于是为了节省新手们和我的时间,决定将这个过程记录下来,以便查阅。

0x01:准备工作

为了完成手动编译的任务,一般我们需要以下的几样工具:

  1. 命令行工具:此处默认我们使用windows操作系统,于是命令行工具即为cmd和powershell(win10),下文默认使用powershell。
  2. 文本编辑器:Windows下我们有自带的notepad(记事本),当然我更推荐其它的有代码高亮、自动补全的更好用的文本编辑器,推荐notepad++(https://notepad-plus-plus.org/)、VS Code(https://code.visualstudio.com/)或者Sublime Text(https://www.sublimetext.com/),以上三者均免费,建议随便挑一个顺眼的去官网下载。当然单纯将任务限定到编译的话,这部分不是重点。
  3. 编译器:Windows下可用的C编译器其实挺多的,包括VS自带的msvc,GNU的gcc,LLVM的clang等等,不过推荐新手还是用MinGW吧,简单粗暴,方便实用,省下更多的时间把精力集中到更重要的地方。如果之前在用某些IDE的话,是自带了某个版本的MinGW的,如果没有的话,可以去官网(http://www.mingw.org/)下载并安装,过程不再赘述。以下部分默认使用MinGW中的gcc编译器。

0x02:配置环境变量

环境变量可以不配置,但是这意味着你将在命令行下每次都要输入gcc的绝对路径,体验十分糟糕。当然你要是不在乎的话,当我没说。以下是配置环境变量的具体流程,默认为在Windows 10下进行操作。

首先你要知道自己的MinGW装在了哪个位置,如果是自己手动安装的,一般在C:\MinGW;如果是IDE自带的,一般在IDE的文件夹目录下(你的IDE装在哪里了不要问我);如果这两处都找不到,你又确认自己装过MinGW,请自行在资源管理器中搜索。找到MinGW文件夹地址后,请看里面的bin文件夹,并确认该文件夹下存在gcc.exe这个可执行文件。如是,则我们接下来需要将这个bin文件夹的路径添加到环境变量中。

在Windows 10开始菜单右侧的搜索栏中输入“环境变量”(英文版为“environment”),选择“编辑系统环境变量”(“Edit System Environment Variables”),点击进入后点击弹出的窗口右下角的“环境变量”按钮,分别编辑用户和系统环境变量中的两个Path值,将上文提到的bin路径添加进去。然后记得点确定。

(图我就不贴了,麻烦

0x03:简述gcc命令参数

win+R输入powershell并进入源码所在文件夹,或者在源码目录下shift+右键选择在此打开powershell,等等。可以gcc --version确认一下是否配置好了环境变量,确认以后可以gcc --help读一下弹出的帮助文档。如下

从零开始教你手动编译源码_第1张图片

在茫茫多的内容中,新手只要看箭头指的三个部分就行了。

  1. gcc [options] file ... ,指出了命令的使用方法为gcc + 源码文件名(可以为多个,用空格隔开),其中options(参数)为可选项。例:gcc main.c ,编译main.c;gcc a.c b.c ,将a.c与b.c同时编译;gcc -std=c99 main.c ,带单个参数的编译;gcc -std=c99 -E main.c ,带多个参数的编译。
  2. -std=,该参数指定编译使用的标准,standard可选项一般为C89,C99,C11,C17(C17貌似现在MinGW的gcc还不支持)。不提供该参数时将使用编译器默认的标准,该默认标准视编译器版本和类型而定。例:gcc -std=c99 main.c ,使用C99标准编译main.c。
  3. -o ,该参数指定编译出的可执行文件的文件名。如不指定该参数,默认编译为a.exe。例:gcc -o hello hello_world.c,将hello_world.c源码文件编译为hello.exe文件(可见Windows下不需要手动打出.exe后缀)。

0x04:编译并重定向

接下来请将如下代码使用编译为hello_world.exe。

#include 
int main()
{
    printf("Hello World!\n");
    return 0;
}

然后执行在Powershell下输入./hello_world即可执行,你会看到Hello World!的输出。

若想将输出从标准输出重定向到hello_world.txt中,只需./hello_world > hello_world.txt即可。输入重定向不再赘述。

以上。

你可能感兴趣的:(从零开始教你手动编译源码)