预处理器定义在 VS2019 C++ 中不起作用

Posted

技术标签:

【中文标题】预处理器定义在 VS2019 C++ 中不起作用【英文标题】:Preprocessor definitions not working in VS2019 C++ 【发布时间】:2020-05-13 19:55:16 【问题描述】:

我在 VisualStudio 2019 中有一个 QT 4.8 应用程序,无论我在活动配置预处理器定义中设置什么,它们似乎都不适用于项目。

如果我去检查应该对当前文件应用什么,它似乎有它,但是 Visual Studio 显示#ifdef 为灰色并且#else 处于活动状态,这不应该是真的。

可能是什么问题?

【问题讨论】:

也许是个愚蠢的问题,但您是否在该属性页中选择了活动的“平台”? 我的解决方案中只有Win32平台。所以是的。该项目的其他设置确实有效,因为我在链接器中有不同的库用于调试和发布。前身的定义不想工作。 当您在其上方#define KREATOR_DEBUG 时是否有效? 您为调试配置定义KREATOR_DEBUG。您是否也使用调试配置构建项目? 【参考方案1】:

您可以在构建项目时检查属性页中PlatformConfiguration的设置是否与构建Solution PlatformsSolution Configurations的设置相同。您可以参考以下图片:

enter image description here

enter image description here

另外,您可以尝试在文件上方添加#define KREATOR_DEBUG。如果是这样,您不必担心这两个设置不同。

【讨论】:

它们是一样的。如果他们不是'我将无法链接不同的库以进行调试和发布。只是预处理器定义不起作用。 #define KREATOR_DEBUG 在包含文件中有效,但我需要它在调试 e 版本中有所不同。 如果你想在调试和发布上有所不同,你可以保持相同的设置,并在Preprocessor Definitions中添加KREATOR_DEBUG。例如,要在发布时运行qDebug(),可以在Property Pages中将Configuration设置为Release,并将Platform设置为Win32。此外,您需要在 Preprocessor Definitions 中添加 KREATOR_DEBUG 。然后,将Solution Configuration 设置为Release 并将Solution Platform 设置为X86。如果你不想在调试的时候运行qDebug(),则不需要进行上述操作。【参考方案2】:

您确定在您的所有项目中都定义了 KREATOR_DEBUG?

根据我的经验,如果您使用

#ifdef KREATOR_DEBUG 
 ...
#endif

在一个 lib 项目的源文件和另一个项目(dll 或 exe 项目)中使用的 lib 中,则 KREATOR_DEBUG 预处理器定义应该在 lib 项目和另一个项目中定义。

【讨论】:

以上是关于预处理器定义在 VS2019 C++ 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 迭代器/向量在发布版本中不起作用

OpenCV 函数在 Python 和 C++ 中不起作用

自定义渲染器功能在 Handsontable 插件中不起作用

发布在构建定义 VS2012 中不起作用

杰克逊自定义反序列化器在 Spring Boot 中不起作用

全局挂钩在 Visual C++ 中不起作用