编译器配置

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

小熊猫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配置中自动勾选了"静态链接所有库";其他配置都没有勾选该选项。

最后修改 March 2, 2023: update (7c5eca8d)