在 ifdef 中包含预编译的头文件

Posted

技术标签:

【中文标题】在 ifdef 中包含预编译的头文件【英文标题】:Include precompiled header in ifdef 【发布时间】:2017-05-15 11:28:44 【问题描述】:

我有一个跨平台项目,我想在 Windows 上使用预编译头文件(在这种情况下它非常重要),而在 Linux 上我不想要它。所以我想要这样的东西:

#ifdef _WIN32
#include "precompiled.h"
#endif //#ifdef WIN32

当我在 Windows 上构建时,我收到了这个烦人的错误,声称:

PCH warning: header stop cannot be in a macro or #if block. An intellisense pch was not generated

有什么办法可以解决这个问题吗?

提前致谢。

【问题讨论】:

不确定,但似乎是警告,而不是错误 为什么要在 Windows 上(它“非常重要”)而不是在 Linux 上?很奇怪。 这个故事有点长,但问题是我真的需要这个预编译的头文件包含在 Windows 构建中,而不是在 Linux 中使用。 只需将#ifdef 移到.h 文件中。 【参考方案1】:

我已经遇到了这个问题,对我来说,这两个选项之一对我有用。

1) 如果您在文件开头添加#pragma once(甚至在#ifndef _WIN32 标头保护之前)。

2) 或者你可以在你的头文件中添加这个 skecth:

#ifndef MYHEADER_H
#define MYHEADER_H
... contents of myheader.h
#endif /* MYHEADER_H */

这将保证您的标头只编译一次,并且此警告将消失(至少对我而言)。

希望它有效!

【讨论】:

你没有抓住重点。 #ifdef _WIN32 在 cpp 文件中(有条件地包含 pch)。

以上是关于在 ifdef 中包含预编译的头文件的主要内容,如果未能解决你的问题,请参考以下文章

需要包含两次预编译头

如何在不扩展包含的头文件的情况下预编译 C 源文件?

浅谈VC++中预编译的头文件放那里的问题分析

GCC 和预编译头文件

VS 总是寻找预编译的头文件

禁用在 clang 前端查找预编译的头文件