1.编译器简介

编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序,百度百科里的流程图解释的很明了:

源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

  • 本地编译器
    可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。
  • 交叉编译器
    可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。

2.Qt常用编译器

Qt Creator会自动检测由系统或者安装程序注册的编译器。你可以添加其他编译器或使用自动检测到的编译器的其他版本来构建应用程序,以下是几个常见的编译器:
(1)GCC(GNU Compiler Collection) 是一个针对于Linux和OS X的编译器。
(2)MinGW(Minimalist GNU for Windows)是一个GCC和GNU Binutils的原生软件端口,用于在Windows上开发原生的Microsoft Windows应用程序。MinGW和Qt Creator以及Qt installers for Windows一起发布。
(3)MSVC:微软的可视C++开发平台。在qt5.9以前,windows版本细分了一些版本,包括MinGW和MSVC,其中MSVC用的VS编译器,还需要安装一些Visual C++的库什么的,总之,如果你的电脑中没有安装VS那就不要安装这个版本了,否则使用时编译通不过。而在之后的版本中,就没有了这种细分,所以我们可以发现5.9之后的安装包都要比之前的大不少。
(4)Linux ICC (Intel C++ Compiler)是针对于Linux的C和C ++编译器。
(5)Clang是一个针对于Windows、Linux和OS X的C、C++、Objective C轻量级编译器。
(6)QCC是编译QNX的C++应用程序的接口。
(7)Custom自定义编译器,需手动添加编译器路径。

想要使用GCC、MinGW、Clang或QCC构建一个应用程序,首先指定路径到编译器所在的目录中,然后从可用版本的列表中选择应用程序二进制接口(ABI)的版本,也可以创建一个自定义的ABI定义。对于QCC来说,还需指定路径到QNX Software Development Platform (SDP)中。

3.问题

我就遇到过,使用编译器类型为GCC进行添加编译器,路径改了,还是报错。。。

原因:makefile是由qmake产生的,当qtcreator选定了qmake后,编译用的cc编译器是由qmake决定的。
qtcreator里更改compilers只能影响build environment里的PATH路径,无法影响qmake在生成makefile时赋值给CC等,所以仅修改GCC的路径是无效的。

解决办法: qmake.conf 影响了qmake生成makefile。
在 Qt/5.4/gcc_64/mkspecs 或者 qt/mkspecs中的每一个目录里面,都有一个包含平台和编译器特定信息的qmake.conf文件。这些设置适用于你要使用qmake的任何项目,一般来说请不要修改它。
假如你所有的应用程序都必须和一个特定的库连接,你可以把这个信息添加到相应的qmake.conf 文件中。

(1)如果你的编译器选择的Type是GCC,就会默认跑GCC的qmake.conf,不会使用配置路径的编译工具,则要修改GCC编译器对应的qmake.conf文件。
(2)选择编译器的Type是Custom,配置交叉编译工具的路径,Coustom对应的qmake.conf会使用配置路径的GCC、G++

Reference