小熊猫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编译程序时,对字符串进行转码,包括两个转码操作:
- 编译前,将程序文件内容转换为gcc内部处理使用的UTF-8编码;
- 链接时,将gcc生成的机器代码中的字符串内容转换为主控台所用的编码,最终得到可执行文件。
在缺省情况下,小熊猫C++生成的编译器配置中会自动勾选”将可执行文件中的字符串转码为"选项,在编译时自动添加相关的转码参数。
静态链接
C/C++的库文件(实现的机器代码)通常有两种提供方式:
- 静态库。程序直接将库里面的机器代码整合到可执行文件中。
- 动态库。机器代码位于.dll(或者.so)文件中,库里面只包含调用.dll的相关信息。可执行文件在执行时需要载入.dll文件调用相应的代码。
链接时使用动态库的好处在于,多个程序可以共用同一个动态库.dll文件,减少程序本身可执行文件的大小、启动速度和内存占用。但这也要求程序在启动时能够找到相应的.dll文件。
windows系统在安装时自带了众多的.dll文件,使用这些.dll开发的程序不需要特殊的配置就可以直接在windows下正常运行。而使用gcc开发环境(mingw-w64)编译和动态链接的程序,就必须要进行相关的设置,否则在运行时就会因为找不到.dll文件而出错。
如果在编译器配置中勾选了"静态链接所有库”,小熊猫C++就会在编译时尝试使用静态链接的方式链接所有用到的库。这样得到的程序可以脱离小熊猫C++环境直接运行。
缺省情况下,小熊猫C++生成的Release配置中自动勾选了"静态链接所有库";其他配置都没有勾选该选项。