什么是我需要建立“释放模式”与GCC全面优化的具体方案? 如果有多个选项,请一一列举。 谢谢。
Answer 1:
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
有没有“一刀切” - 你需要了解你的应用程序,您的需求和优化标志,以确定您的二进制正确的子集。
或应答你想:-O3
Answer 2:
下面是我经常使用的一个Makefile的一部分(在这个例子中,它试图建立一个名为foo的程序)。
如果你运行它像$ make BUILD=debug
或$ make debug
,然后调试 CFLAGS将被使用。 这些关闭优化( -O0
),并且包括调试符号( -g
)。
如果忽略这些标志(运行$ make
不带任何附加参数),你会建造发行 CFLAGS版本,其中优化时( -O2
),调试符号剥离( -s
)和断言禁用( -DNDEBUG
)。
正如其他人的建议,你可以用不同的实验-O*
设置您的特定需求dependig。
ifeq ($(BUILD),debug)
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif
all: foo
debug:
make "BUILD=debug"
foo: foo.o
# The rest of the makefile comes here...
Answer 3:
需要注意的是海湾合作委员会不具有“释放模式”和“调试模式”像MSVC一样。 所有的代码只是代码。 各个优化选项的存在(-02和-Os是你一般需要关心的,除非你正在做的非常微调唯一的)修改生成的代码,而不是在一个方法,以防止与其他ABI兼容互操作性码。 一般来说,你想对你的东西要释放的优化。
在“-g”选项的存在会导致长期被放置在生成的文件符号和源代码的信息,这是有用的调试,但会增加文件的大小(和表现出你的源代码),这是你经常不想在“释放”的二进制文件。
但他们不是唯一的。 你可以有优化和调试信息,或者一个既不编译的二进制。
Answer 4:
-02将打开不需要的空间\速度的权衡,并往往是我看到的最常用的一个所有优化。 -O3确实为速度的权衡一些空间(如内联函数)。-Os确实O2加做其他的事情,以减少代码量。 这可以使通过提高缓存的使用比O3快的事情。 (测试以找出它是否适合你。)注意,有大量的选择,没有任何的O开关触摸。 他们被排除在外的原因是因为它往往取决于什么样的代码你写还是有很大体系结构相关。