【发布时间】:2013-03-12 08:31:59
【问题描述】:
gcc (GCC) 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 和 -DNTHREAD_SAFE 添加了 N,并将优化设置为 2 级。
我说得对,N 的意思是 NO DEBUG?
这就是我需要做的所有事情来区分调试和发布版本吗?
【问题讨论】:
-
定义
DEBUG和NDEBUG分别用于调试和发布编译。但是,您不希望发布版本也是可重入和线程安全的吗?然后不要更改这些定义。 -
为什么要在发布模式下设置 -DNREENTRANT 和 -DNTHREAD_SAFE?你不是在发布模式下在多线程环境下运行你的代码吗?
-
NDEBUG是一个预处理器符号,用于控制assert是否处于活动状态,如 C 标准所指定。_DEBUG的状态不同。 -
@Jay,我已经为这些更改编辑了我的源代码。那是我的错误。