我正在使用 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!
我已经确定了以下标志:
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
。