CMAKE_BUILD_TYPE=Release 是否暗示 -DNDEBUG?

Does CMAKE_BUILD_TYPE=Release imply -DNDEBUG?

CMAKE_BUILD_TYPE=Release implicitly imply -DNDEBUG吗?

如果不是:是否可以合理地预期这种暗示会发生?

我想知道以下 CMake 代码在我的 CMakeLists.txt 中是否多余:

if (NOT CMAKE_BUILD_TYPE MATCHES Debug)
    add_definitions(-DNDEBUG)
endif()

是的,是CMake设置的。通过 CMake 代码进行 Grepping 显示,它已为许多编译器设置。可能他们只为这些接受此标志的编译器设置它。这是关于 GCC 的行之一:

Modules/Compiler/GNU.cmake:  set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")

但请注意,许多项目会在不保留初始设置的情况下覆盖 release/debug 标志,并且还会覆盖用户的定义。