cmake - 我设置了 CMAKE_BUILD_TYPE=Release,但我注意到未设置 NDEBUG 标志。这是否意味着它是一个调试版本?
问题描述
我正在开发一个需要高性能的具有 3d 图形的嵌入式应用程序。在调查性能问题时,我注意到未设置 NDEBUG 标志。我还确认了 CMAKE_BUILD_TYPE=Release。不应该为发布版本设置 NDEBUG 标志吗?未设置 NDEBUG 标志是否意味着这是一个调试版本?
我将其设置为发布版本,但我也将其设置为 -O2 优化。这是否会覆盖 Release 版本并使其进入调试状态?
解决方案
我已经在我的 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)
推荐阅读
- javascript - 基于文件名的自动完成建议
- javascript - 如何防止 IE11 中 requestAnimationFrame() 闪烁?
- c++ - c++朋友运算符模板特化
- random - 有没有办法从 HTML 表格中选择一个随机单元格并更改其背景颜色?
- mysql - Sails.js 无法从其他模型的生命周期中创建另一个模型中的数据
- android - Crashlytics 报告垃圾收集器内部的 Android 应用程序崩溃
- ruby-on-rails - 如何更改使用 Docker for Windows 创建的 Gemfile 的权限?
- html - 我如何像现有的每个流行网站一样为不同的页面重用 HTML 代码?
- powershell - 在 PowerShell 中覆盖目标文件
- c# - 无法使用带有嵌入列表(例如字典)的字典来解决我的问题
>