这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

编译与执行

(以单文件方式)编译和执行程序代码

在小熊猫C++中,可以直接将一个包含main函数的程序文件编译链接成可执行文件,然后执行或者调试。

1 - 编译器配置

通过使用合适的"编译器配置",来编译符合需要的可执行文件

小熊猫C++通过调用外部的gcc编译器来编译和链接程序。通过不同的参数设置,gcc可以将同样的源程序编译成不同的可执行文件。因此,为了方便用户的使用,小熊猫C++与其他大多数的IDE一样,以"编译器配置"的形式来管理编译器的设置。

每个"编译器配置"都是一套gcc相关的编译参数设置,包括:

  • gcc和其他相关程序的路径
  • gcc在编译时用的相关文件夹位置
  • gcc编译参数
  • gcc链接参数等等

通过工具栏上的编译器设置下拉框,用户可以切换当前使用的编译器配置(见下图)。

小熊猫C++在第一次运行时,会自动寻找自带的和系统PATH中的gcc程序,并生成相应的编译器配置。

在之后每次运行时,会自动检查当前编译器配置中的gcc程序是否存在;如果不存在,会自动提示用户重新寻找gcc编译器。

Release和Debug

小熊猫C++为每个自动找到的gcc创建两个编译器配置:Release配置和Debug配置。

在缺省情况下,小熊猫C++会将Debug配置设置为当前编译器配置。

配置类型 作用
Release 生成优化、静态链接的可执行文件。其执行速度最快(-O2优化),可以脱离gcc环境独立运行
Debug 生成调试用的可执行文件;其中包含了调试信息和符号,运行速度相对较慢(-Og优化);脱离gcc环境运行时会提示缺少dll文件

管理编译器配置

用户可以通过"选项"对话框中的"编译器"→“编译器配置集"来创建、编辑和管理编译器配置。

自动搜索编译器

当用户需要恢复缺省的编译器设置,或者在系统PATH中加入了新的gcc兼容编译器时,可以通过"编译器配置集"页上部工具栏的"自动搜索编译器"按钮(见下图)来重新搜索和生成编译器配置。

注意:自动搜索编译器会自动删除原有的全部编译器配置!

在指定文件夹中搜索编译器

通过"编译器配置集"页上部工具栏的"在指定文件夹中搜索编译器"按钮(见下图),可以为指定的文件夹中的gcc兼容编译器建立相应的编译器配置。

添加空白编译器设置

通过"编译器配置集"页上部工具栏的"添加空白编译器设置"按钮,可以创建空白的编译器设置。用户需要自行填写设置中的相关参数。

编译器配置参数

编码转换

对于使用printf或者std::cout输出的程序,如果要输出的字符串常量(字面量)中包含非ascii字符,且程序文件本身的编码和操作系统控制台的编码(中文windows缺省为gbk)不一致,就会导致程序运行时输出的内容显示为乱码。

另外,gcc内部使用UTF-8来分析和处理程序。如果程序文件编码不是UTF-8,并且在标识符里使用了非ascii字符,那么编译就会失败。

因此,当程序中包含非ascii字符时,就需要在gcc编译程序时,对字符串进行转码,包括两个转码操作:

  1. 编译前,将程序文件内容转换为gcc内部处理使用的UTF-8编码;
  2. 链接时,将gcc生成的机器代码中的字符串内容转换为主控台所用的编码,最终得到可执行文件。

在缺省情况下,小熊猫C++生成的编译器配置中会自动勾选”将可执行文件中的字符串转码为"选项,在编译时自动添加相关的转码参数。

静态链接

C/C++的库文件(实现的机器代码)通常有两种提供方式:

  • 静态库。程序直接将库里面的机器代码整合到可执行文件中。
  • 动态库。机器代码位于.dll(或者.so)文件中,库里面只包含调用.dll的相关信息。可执行文件在执行时需要载入.dll文件调用相应的代码。

链接时使用动态库的好处在于,多个程序可以共用同一个动态库.dll文件,减少程序本身可执行文件的大小、启动速度和内存占用。但这也要求程序在启动时能够找到相应的.dll文件。

windows系统在安装时自带了众多的.dll文件,使用这些.dll开发的程序不需要特殊的配置就可以直接在windows下正常运行。而使用gcc开发环境(mingw-w64)编译和动态链接的程序,就必须要进行相关的设置,否则在运行时就会因为找不到.dll文件而出错。

如果在编译器配置中勾选了"静态链接所有库”,小熊猫C++就会在编译时尝试使用静态链接的方式链接所有用到的库。这样得到的程序可以脱离小熊猫C++环境直接运行。

缺省情况下,小熊猫C++生成的Release配置中自动勾选了"静态链接所有库";其他配置都没有勾选该选项。

2 - 编译和运行

使用编译和运行的相关功能

通过"运行"菜单,或者工具栏上的相关按钮,即可编译和运行当前打开的程序文件。

3 - 自动链接

根据程序中包含的头文件,自动生成对应的库文件链接参数

大多数C/C++库使用声明和实现分离的形式发行,把相关函数等的声明放在.h头文件中,而把实现编译成.a或者.lib库文件。我们的程序在使用这些库时,除了需要使用#include语句包含相关的头文件外,还需要通过编译参数告诉gcc需要链接的库文件。

Visual C++通过引入#pragma语法,可以在头文件中直接指明对应的库文件;而gcc编译器尚不支持该语法,这就导致用户在使用gcc编译程序时,必须通过自定义链接参数来指定要链接的库,否则就会编译链接失败。如果用户需要在不同的程序中链接不同的库,反复修改自定义链接参数就成了一件很繁琐的事情。

针对这个问题,小熊猫C++提供了一个解决方法:自动链接。在编译单文件程序时,小熊猫C++会根据程序中直接或者间接包含的头文件信息,在自动链接表中查找对应的链接参数。其在"选项"对话框中的配置页如下图所示:

注意:自动链接仅对单文件程序编译生效

小熊猫C++缺省提供了ege、海龟作图、raylib、freeglut等的自动连接配置。因此,用户在小熊猫C++中使用这些库时,不需要手工设置自定义链接参数,非常方便。

4 - 输入重定向

利用输入重定向功能在运行时自动输入数据,减少测试运行时的工作量

我们为学习C/C++语言和算法编写的练习程序,经常需要在运行时输入一些数据。例如下题(来自洛谷):

在运行时需要输入:

4 3
3 7 12 19

在解决这个题目的过程中,必然需要反复输入这些数据。即使是通过复制粘贴来输入,这也是一件繁琐的事情。小熊猫的输入重定向功能可以帮助我们自动在运行程序时输入数据。

首先,我们用记事本软件,把要输入的数据保存在一个文本文件中(这里假设它的路径是f:/data.txt)。接下来我们会让程序在运行时自动从这个文件中读入内容。

启用输入重定向

通过"运行"菜单→“运行参数…",或者工具栏上的对应按钮,可以直接打开"选项"对话框的"程序运行”→“通用"选项页(以下简称"程序运行选项"页)。

在"程序运行选项"页中勾选"将程序的标准输入重定向到下面的文件”,并填写文件所在的路径,即可启用输入重定向功能。

启用后,程序中的scanf或者cin语句就会从f:/data.txt中读入数据。