[Powered by Google Translate] [制作，铛]
内特 - 哈迪森] [哈佛大学]
[这是CS50] [CS50.TV]
因此，让我们说，我已经写了一个小的C程序，打印出来的话“你好，世界！”
我将它保存在一个文件名为hello.c。
我怎么运行这个程序吗？
如果我只是尝试运行的。c文件，这是行不通的。
>> 电脑不一样，我打算把它当作一个C程序。
事实证明，即使C代码看起来很神秘的在第一，
它仍然不是足够低的水平，为计算机理解。
之前，你可以在计算机上运行的C代码，您首先需要编译它，
你的C代码转换成机器代码，
- 正如它的名字所暗示的 - 是一个二进制的机器可以理解的格式。
>> 做到这一点最简单的方法是只使用一个被称为“使命令。”
Make是一个实用程序，用于编译源代码。
这不是一个编译器本身，而是一个程序，组织编译器的调用
源代码文件，这样的事情以正确的顺序被编译
并以适当的方式，因为编译器标志可以得到一种复杂的，我们会看到。
这是特别有用的，当你的工作有很多大的项目的源代码文件
和许多不同的库。
但它也是很好的使用它，当你只是用一个单一的文件。
所以，让我们的这个“你好，世界！”程序，使用make编译。
我的源代码文件的名称是hello.c的，所以我会键入make你好，
将使用其默认设置来编译它。
>> 如果一切顺利，我可以使用ls命令列出的目录中的所有文件，
我应该看到一个新的文件名为“你好。”
该文件被称为“可执行文件”
它是二进制格式的，计算机可以理解的。
如果我们把它打开，我们可以看到一些字符，我们可以理解，
但在大多数情况下它只是一堆繁文缛节。
不过，我可以运行此文件，看它打印出来“你好，世界！”一遍又一遍。
>> 哦，兴奋​​！
所以，让我们回到了一下，我们的make命令，看看究竟发生了什么
，以产生可执行文件。
你可以看到，我跑时，它打印出这条线
开始“铛”和结尾的“你好”。
这是调用编译器 - 在这种情况下，一个叫“铛”
一堆以我们的可执行文件的默认标志或选项。
>> 铛是世界上有一些C编译器之一。
你可能已经听说过或使用其他的，
尤其是一个被称为“海湾合作委员会”，是特别常见的。
我们选择使用铛CS50，因为我们认为它做了很好的工作
提供有用的警告和错误消息
，因为使用它是非常类似于使用gcc，
这样你就可以很容易地在两者之间切换。
>> 时跑铛，它跑了一大堆的选项。
然而，这是没有必要使用所有这些选项
只是编译一个单一的C源代码文件。
所有我需要做的是使用铛hello.c的。
同样，如果一切顺利的话，这将产生一个可执行文件。
但是，如果我尝试运行。/你好，我得到一个错误说，有没有这样的文件或目录。
发生什么事了吗？
铛的默认名称的可执行文件a.out格式，
我们看到，如果我们用ls列出目录。
这个文件中，我们可以运行，它也将打印出“你好，世界！”如预期。
>> 如果我们想要重命名的可执行文件，
这样做，我们可以使用move命令，
但大多数的时候，我们只是想为我们铛做适当的命名。
为此，我们可以使用-o标志。
如果我运行铛hello.c的-O你好，
然后我会得到一个名为“hello的可执行文件。”
-o选项是超级常见的，所以我们期待看到和使用了很多。
接下来的铿锵-W开始，你会看到很多的选项。
这些选项控制什么样的警告铛让你对你的代码。
例如，铛，可以提醒你，如果你声明一个变量，从来没有使用过。
如果我把一个int变量x的hello.c
然后编译铛-XX未使用的变量hello.c的邻你好，
的铛警告我这个未使用的变量，在我的代码。
>> 现在，有一吨不同类型的警告，
这将是令人讨厌全部列出来，当您运行铛。
相反，有一个快捷方式选项 - 墙把他们所有。
我们在默认情况下，当你运行在家电，
所以你会得到所有的警告铛可以给你对你的代码。
在一般情况下，你的代码产生编译警告是不是一件好事，
我们将期待你写的程序CS50警告。
但是，正如你看到的，铛仍然会生成一个可执行文件
即使是在编译过程中的警告。
但是，我们可以强制铛停止编译并产生错误
如果遇到在代码中的警告值得。
我们这样做的-Werror选项。
>> 现在，如果我编译我的hello.c文件与未使用的整型变量x，
我不会得到一个可执行文件。
现在，我不能忽视编译警告。
我需要去修复我的代码。
另外一个重要的选项是-ggdb。
这使得特殊的调试信息的可执行文件，
这样我就可以运行调试器，GDB，如果它崩溃。
如果没有这个选项，我无法访问我的程序的信息gdb内的大部分，
像变量和函数名，
所以重要的是，包括ggdb了。
当你运行在设备上，该选项也被默认包含的。
>> 最后的选择，重要的是要知道的是-L，
这是用来连接到你的代码库。
例如，如果你要使用函数从CS50库，一样的GetString，
你需要确保不仅你的＃include库的头文件，CS50.h，
在你的C源代码文件。
而且您使用-lcs50当编译，
使图书馆的实现是与你的程序。
让我们改变的hello world程序提示用户输入用户名与GetString函数
在我们的hello字符串，然后使用该名称。
>> 现在，如果我们试图，编译此Ø使用lcs50程序，
我们得到了一个错误的未定义引用的GetString。
嗯哦！让我们添加的lcs50，现在一切都工作得很好。
>> 有一个问题是，它在你的命令写lcs50有所作为。
如果我把它写之前我写的hello.c，然后CS50库被加载和处理
在我的源代码。
所以，这是因为如果我不写lcs50所有。
作为一个经验法则，一般情况下，你会希望把所有的-l选项
在您的命令。
所以，现在让我们把它们放在一起。
铛-ggdb墙 - Werror hello.c中，lcs50-O的打招呼 -
这是一个很大的东西。
>> 这就是为什么品牌是有帮助的。所有这一切对你负责。
>> 所以，现在你已经有了一个好主意，进入编译你的代码。
我的名字是Nate哈迪森。这是CS50。
[CS50.TV]