簡體   English   中英

如何使用GCC中的優化功能以發布模式進行構建?

[英]How to build in release mode with optimizations in GCC?

在GCC中進行全面優化后,我需要在“發布模式”下構建哪些特定選項? 如果有多個選項,請全部列出。 謝謝。

這是我經常使用的Makefile的一部分(在此示例中,它正在嘗試構建名為foo的程序)。

如果以$ make BUILD=debug$ make debug則將使用Debug CFLAGS。 這些將關閉優化( -O0 )並包括調試符號( -g )。

如果省略這些標志(通過運行$ make而沒有任何其他參數),則將構建Release CFLAGS版本,在該版本中,優化處於打開狀態( -O2 ),調試符號已剝離( -s )和斷言被禁用( -DNDEBUG )。

正如其他人所建議的,您可以根據自己的特定需求嘗試不同的-O*設置。

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...

http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

沒有“一刀切”的一切-您需要了解您的應用程序,需求和優化標志,才能確定二進制文件的正確子集。

或您想要的答案:-O3

請注意,gcc不像MSVC那樣具有“發布模式”和“調試模式”。 所有代碼都是代碼。 各種優化選項的存在(除非您進行非常精細的調整,否則通常需要關心的只有-O2和-Os)會修改生成的代碼,但是並不能防止與其他符合ABI要求的互操作性碼。 通常,您要對要發布的內容進行優化。

“ -g”選項的存在將導致擴展的符號和源代碼信息放置在生成的文件中,這對於調試很有用,但會增加文件的大小(並顯示源代碼),這是您經常遇到的問題不需要“已發布”的二進制文件。

但是它們不是唯一的。 您可以使用優化和調試信息編譯二進制文件,也可以不編譯任何二進制文件。

-O2將打開所有不需要空間\\速度折衷的優化,並且這是我最常使用的優化。 -O3做一些空間來權衡速度(例如函數內聯。)-Os做O2加做其他事情以減少代碼大小。 通過提高緩存使用率,可以使事情比O3快。 (請測試一下是否適合您。)請注意,有很多選項都不會與O開關接觸。 之所以忽略它們,是因為它通常取決於您正在編寫的代碼類型或與體系結構密切相關的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM