首页 > 解决方案 > 我设置了 CMAKE_BUILD_TYPE=Release,但我注意到未设置 NDEBUG 标志。这是否意味着它是一个调试版本?

问题描述

我正在开发一个需要高性能的具有 3d 图形的嵌入式应用程序。在调查性能问题时,我注意到未设置 NDEBUG 标志。我还确认了 CMAKE_BUILD_TYPE=Release。不应该为发布版本设置 NDEBUG 标志吗?未设置 NDEBUG 标志是否意味着这是一个调试版本?

我将其设置为发布版本,但我也将其设置为 -O2 优化。这是否会覆盖 Release 版本并使其进入调试状态?

标签: cmake

解决方案


我已经在我的 PC 上使用 CLion 测试了以下代码。当 CMAKE_BUILD_TYPE=Release 时,程序运行并以 0 退出。当 CMAKE_BUILD_TYPE=Debug 时,断言失败。当 CMAKE_BUILD_TYPE 设置为 Release 时,似乎 CMake 或 CLion 会自动设置 NDEBUG。您还可以显式设置 NDEBUG 以确保assert等函数不会影响嵌入式程序的性能。

#include <iostream>
#include <assert.h>

using namespace std;

int main(){
    assert(1 == 0);
    cout << "Hello world" << endl;
    return 0;
}

CMakeLists.txt 如下:

cmake_minimum_required(VERSION 3.10)
project(test_ndebug)

add_executable(test_ndebug main.cpp)

推荐阅读