改进 g++ 编译器标志以进行调试和发布

问题描述 投票:0回答:1

我正在使用 sdl2 用 C++ 制作游戏,目前我正在使用以下标志使用 g++ 编译程序:

DEBUG_FLAGS = -g -Og -DDEBUG
RELEASE_FLAGS = -O3 -DNDEBUG -mwindows -s

我希望调试版本具有尽可能多的调试符号,并且我希望发布版本牺牲文件大小以获得最大的兼容性和性能。我也不希望我的类和函数名称出现在发布版本中。另外,我确实想让游戏在 Windows 以外的平台上运行。

到目前为止,这些标志已经起作用,但我很好奇添加 -flto、-Wall、-Wextra、-pedantic 和 -std=c++17 等内容。另外,我不确定 -DNDEBUG 是否需要与 -O3 一起使用,以及 -DDEBUG 是否需要与 -Og 一起使用。

编辑:
我添加了 -Wall、-Wextra 和 -Werror。另外,我现在知道我需要将 -DNDEBUG 与 -O3 一起使用。但是,我仍然不确定 -flto、-pedantic、-std=c++17 以及将 -DDEBUG 与 -Og 一起使用。

编辑2:
到目前为止我已经决定了这些编译器标志:

DEBUG_FLAGS = -g -Og -DDEBUG -Wall -Wextra -Werror -std=c++17
RELEASE_FLAGS = -O3 -DNDEBUG -mwindows -s -Wall -Wextra -Werror -std=c++17

但是,我仍然不确定 -pedantic、-Wpedantic、-flto 以及将 -DEBUG 与 -Og 一起使用。

编辑3:
现在标志是:

DEBUG_FLAGS = -g -Og -D_GLIBCXX_DEBUG -Wall -Wextra -Werror -Wpedantic -std=c++17
RELEASE_FLAGS = -O3 -DNDEBUG -Wall -Wextra -Werror -Wpedantic -std=c++17 -mwindows -s

现在我只需要知道是否应该使用 -flto!

c++ compiler-optimization debug-symbols compiler-flags
1个回答
0
投票

我已经确定了以下标志:

DEBUG_FLAGS = -g -Og -D_GLIBCXX_DEBUG -Wall -Wextra -Wpedantic -Werror -std=c++17 -flto
RELEASE_FLAGS = -O3 -DNDEBUG -Wall -Wextra -Wpedantic -Werror -std=c++17 -mwindows -s -flto

我添加了

-Wall
来启用编译器警告,
-Wextra
来启用一些额外的警告,
-Wpedantic
来警告违反标准,以及
-Werror
将所有警告视为错误。我还添加了
-std=c++17
以确保编译器使用 c++ 17。最后,我添加了
-flto
以启用链接时间优化。

我还在调试标志中将

-DDEBUG
(对
-Og
-g
没有任何作用)更改为
-D_GLIBCXX_DEBUG

© www.soinside.com 2019 - 2024. All rights reserved.