gpt4 book ai didi

设置调试和 Release模式时的编译器标志

转载 作者:行者123 更新时间:2023-12-02 05:11:36 26 4
gpt4 key购买 nike

海合会 (海湾合作委员会) 4.7.2 cmake 版本 2.8.10.2 c89

我正在使用 cmake 作为我的构建系统。我想相应地设置标志以调试或发布。

调试编译

  SET(CMAKE_C_FLAGS_DEBUG "-Wall -Wextra -Wunreachable-code -g -m32 -D_DEBUG -O0 -D_LARGEFILE64_SOURCE -D_REETRANT -D_THREAD_SAFE")

编译发布

  SET(CMAKE_C_FLAGS_RELEASE "-Wall -Wextra -Wunreachable-code -m32 -DNDEBUG -O2 -D_LARGEFILE64_SOURCE -D_REETRANT -D_THREAD_SAFE")

对于调试,我包含了标志 -g 并将优化设置为 0 级。

对于该版本,我删除了标志 -g 并为 -DNDEBUG-DNREETRANT 添加了 N , 和 -DNTHREAD_SAFE 并将优化设置为 2 级。

N 表示 NO DEBUG 是对的吗?

我需要做的就是区分调试版本和发布版本吗?

最佳答案

以下是基于您的 CMake 标志的一些建议:

  1. Debug模式-g -O0, Release模式-O2 -g。如果代码大小不重要,最好为 O2 Release模式添加 -g 标志。使用-g,包含了代码的一些符号信息,它只增加了大约10%~ 20%的整个二进制大小,但是用户可以帮助你给你一个stack dump,这可以帮助很多用于调试。
  2. 使用 -UDEBUG -UREETRANT 而不是 -DNDEBUG -DNREETRANT-DMACRO 标志就像在您的代码中添加 #define MACOR,如果您有像 #ifdef MACRO SOME_DEBUG_CODE #endif 这样的代码区域,预处理器会将代码保留在那里,而 -UDEBUG 标志类似于 #undefine MACRO,预处理器将删除 SOME_DEBUG_CODE。如果只是加-DNDEBUG -DNREETRANT,就相当于在代码中加#define NDEBUG #defin NREETRANT,没有意义。

关于设置调试和 Release模式时的编译器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15356472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com