【问题标题】:Is it possible to set certain header files to be compiled under "Release" mode in Visual Studio with CMake?是否可以使用 CMake 在 Visual Studio 的“发布”模式下设置某些头文件进行编译?
【发布时间】:2019-08-19 21:02:10
【问题描述】:

是否可以使用 CMake 在 Visual Studio 的“发布”模式下设置某些头文件进行编译?

场景:

整个项目用CMake设置(不生成proj/sln文件,直接指向项目的目录)

我们通过 CMake 引入了仅标头依赖项,该依赖项在发布模式下运行速度非常快,但是在调试模式下运行速度不快。

是否可以将此依赖项设置为在发布模式下构建,而应用程序的其余部分在调试模式下运行?如果这不可能,是否有任何解决方法?

作为参考,我使用的是 Visual Studio 2019 Community 16.1.6

【问题讨论】:

  • 在调试模式下运行速度不快 调试模式可能比发布模式慢 100 倍。我见过应用程序在发布模式下花费几秒钟而在调试模式下花费一天以上的情况。
  • 是否可以将此依赖项设置为在发布模式下构建,而应用程序的其余部分在调试模式下运行?很可能不是。这可能会导致您同时拥有调试和发布运行时 CRT,从而导致 UB。
  • 你不编译头文件。 .cpp 文件使用需要更改其编译选项的头文件。
  • “你不编译头文件”——当然。在我发布这个之前,我应该意识到我在问什么。我将需要研究部署依赖项的其他途径。谢谢 drescherlm、Jesper 和 Richard。
  • 对于任何可能偶然发现这一点的人来说,Richard 对于头文件没有被编译是 100% 正确的,但是,我能够通过切换 " CMakeSettings.json下的“配置类型”到“RelWithDebInfo”。

标签: c++ cmake visual-studio-2019


【解决方案1】:

嗯,头文件不编译,只包含。

所以要在调试版本中禁用标头,DEBUG 宏就足够了:

#ifdef DEBUG
#include "problematic_header.h"
#endif

当然,您还必须使用此标头中的声明禁用任何功能。

【讨论】:

    【解决方案2】:

    (发表评论以回答问题)

    对于可能偶然发现这一点的其他人,Richard 100% 正确地认为头文件没有被编译,但是,通过将“配置类型”切换为“ RelWithDebInfo”在 CMakeSettings.json 下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多