如何在GCC中关闭任何优化标志

时间:2015-02-16 11:09:12

标签: gcc

我试图了解如何关闭使用GCC编译的特定优化标志。我知道有些标志有一个-fno选项,但大多数标志都没有(从我看到的)。我正在尝试使用-O1标志编译程序,但是为每次编译删除-O1中的一个标志。

例如; -fauto-inc-dec没有等效的-fno-auto-inc-dec标记,我可以将其传递给-O1 -fno-auto-inc-dec这样的参数。

想要使用-O1选项进行编译,但请关闭-O1给出的具体选项,以查看导致的差异。

任何帮助将不胜感激,不幸的是我是新手,所以我非常初学。

2 个答案:

答案 0 :(得分:4)

man gcc中所述:

Most optimizations are only enabled if an -O level is set on
the command line.  Otherwise they are disabled, 
even if individual optimization flags are specified.

所以基本上传递任何-O标志,你不能​​使用可配置的优化。

此外,-O1不是默认设置,-O0是。

您也可以从相反的方向开始,禁用所有优化并启用"批次"手动,即查看gcc -Q --help=optimizers,看看在哪个级别启用了哪些优化并剥离它们。

为了解决您-O*选项启用未列出标记的问题,我要说它是一个手册页。在特定体系结构上主动查询编译器应该为您提供一个详尽的优化列表,该列表将使用特定的-O标志启用,因此将-O0与这些列表结合使用flags 应该产生完全相同的结果。

答案 1 :(得分:2)

为什么不走另一条路呢?使用-O0关闭所有优化并有选择地启用它们。

或者如果您希望逐个禁用它们,请从:

开始
CFLAGS=-O0 \
      -fauto-inc-dec \
      -fcompare-elim -fcprop-registers \
      -fdce -fdefer-pop -fdelayed-branch -fdse \
      -fguess-branch-probability \
      -fif-conversion2 -fif-conversion \
      -fipa-pure-const -fipa-profile -fipa-reference \
      -fmerge-constants \
      -fsplit-wide-types \
      -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp -ftree-ch \
      -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse \
      -ftree-forwprop -ftree-fre -ftree-phiprop -ftree-slsr -ftree-sra \
      -ftree-pta -ftree-ter \
      -funit-at-a-time

(顺便说一句,所有这些信息均来自man gcc