如何在没有调试符号和没有优化的情况下创建cmake构建配置?

Jer*_*riX 1 c++ cmake

我认为默认配置类型可以像这样描述:

Debug          : w/ debug symbols, w/o optimization
Release        : w/o debug symbols, w/ optimization
RelWithDebInfo : w/ debug symbols, w/ optimization
MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
Run Code Online (Sandbox Code Playgroud)

但我需要新的:

MyConf         : w/o debug symbols, w/o optimization
Run Code Online (Sandbox Code Playgroud)

那么,如何创建呢?

小智 6

关于表

根据gcc/clang编译器(CMake 3.4.1)配置:

  • 调试: -g
  • 发布: -O3 -DNDEBUG
  • RelWithDebInfo: -O2 -g -DNDEBUG
  • MinSizeRel: -Os -DNDEBUG

它的意思是:

  +---------------+--------------+--------------+----------+
  |               | optimization | assert works | stripped |
  +---------------+--------------+--------------+----------|
  |     Debug     |     no       |     yes      |    no    |
  |    Release    |    full      |      no      |   yes    |
  | RelWithDebInfo|    good      |      no      |    no    |
  |   MinSizeRel  |    size      |      no      |   yes    |
  +---------------+--------------+--------------+----------+
Run Code Online (Sandbox Code Playgroud)

所以,我不同意你的同意MinSizeRel,因为在这种情况下,我认为无论是描述MinSizeRelRelease被剥离.

关于问题

据我所知,你根本不需要额外的标志(不-g,-O*-DNDEBUG).对于Makefile类似的发电机:

> cmake -H. -B_builds -DCMAKE_BUILD_TYPE=MyConf -DCMAKE_CXX_FLAGS_MYCONF=""
> cmake --build _builds
Run Code Online (Sandbox Code Playgroud)

对于像Visual Studio这样的生成器,您需要使用CMAKE_CONFIGURATION_TYPES(请参阅答案):

> cmake -H. -B_builds -DCMAKE_CONFIGURATION_TYPES="Release;Debug;RelWithDebInfo;MinSizeRel;MyConf" -DCMAKE_CXX_FLAGS_MYCONF="/Od" -DCMAKE_EXE_LINKER_FLAGS_MYCONF=""
> cmake --build _builds --config MyConf
Run Code Online (Sandbox Code Playgroud)