是否有一组标准的编译器选项?

Is there a set of standard compiler options?

我正在使用 qmake 制作一个项目,我希望它易于被许多用户编译。到目前为止,我只为 Linuxgcc 编译器开发。我希望我的项目也可以在其他平台上编译。

到目前为止,我将编译器选项(我在 gcc 文档中找到)传递给 qmake,如下所示:

QMAKE_CXXFLAGS += -std=c++14 \
                  -ffloat-store \
                  -O3 \

但后来我意识到这些选项在其他编译器上可能无效,并试图为其他流行的编译器找到等效选项,例如 clangIntel 。令我惊讶的是,我发现:

  1. 优化选项 -O0, -O1, -O2, -O3 对所有三个编译器都是通用的。
  2. -std=c++11-std=c++14选项对于gccclang
  3. 是通用的
  4. 据我所知,-ffloat-store 和其他一些选项仅存在于 gcc.

我想知道,是否有一组正式或非正式标准的选项?

没有

C++ 标准不涵盖任何编译器选项。这在不同的实现(甚至是同一实现的不同版本)之间可能会有很大差异。

POSIX 定义了一些关于 c99 命令的东西(但 AFAIK 没有关于 C++ 的东西)。

但是,qmake 实用程序通常能够找出(或至少期望)什么是 C++ 编译器以及如何调用它。请注意,它正在生成 Makefile

在 Qt 之外,您可能会考虑 cmake or autoconf。它们都生成 Makefile-s.

另见 this answer (on Programmers)。

在我的脑海中,主要编译器之间几乎没有任何共同点。

事实是,当您瞄准多个平台时,任何重要的项目都需要对代码内和构建过程进行一些微调。你最好的选择是根据我的经验(这主要是基于意见),为每个编译器设计构建过程尽可能简单,并通过 [=16= 中的 pragmas 修复大部分 'quirks' ] 具体的包含文件,你 "auto-include" 无处不在。