如何使用多个预编译头文件;一些来自图书馆

问题描述 投票:0回答:1

我认为这不是我的项目所特有的,它适用于任何使用预编译头文件的C ++库和使用具有自己的预编译头文件的库的项目。它只是C ++ / winRt标题是超时的,你真的需要预先编译它们。

我有一个C ++ / winRT UWP库。由于它使用Windows运行时API,因此需要预先编译那些大量的头文件。我称该文件为'btwrpch.h',因为它主要包含蓝牙运行时API。图书馆建设很好。

现在这个库将用于另一个C ++ / winRT UWP项目,该项目也使用Windows运行时,主要是UI的东西。此项目的预编译头使用经典pch.h.

要使用该库,项目具有库头文件,包括btwrpch.h。该项目有自己的pch.h文件。

我无法弄清楚如何为两者创建预编译头文件。

在项目中,我放置了btwrpch.cpp文件和pch.cpp文件。我配置了每个这些cpp文件以生成预编译头。

在项目属性预编译头选项中我有两个文件,pch.h; btwrpch.h和两个输出文件$(IntDir)pch.pch; $(IntDir)btwrpch.pch;

然而,当我重建项目时,我得到了错误

fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "pch.h; btwrpch.h"' to your source?

我有一个名为app.cpp的源文件(除了header.cpp文件之外),还包含两个头文件。查看Debug目录,我看到了pch.pch和btwrpch.pch。

我究竟做错了什么?

请注意,如果我将btwrpch.h文件合并到pch.h并仅定义一个预编译头,它可以正常工作。我不希望库用户必须这样做。

uwp precompiled-headers c++-winrt
1个回答
1
投票

虽然每个项目可以有多个precompiled header files,但每个编译单元最多只能有一个预编译头。显然,您将多个预编译的头文件拖放到单个编译单元中。这不受支持。

我究竟做错了什么?

您将预编译的头文件包含在其他标头中。这不是他们的意思。仅将预编译的头文件包含在编译单元中。

这里的解决方案很简单:从库的公共接口(定义API的头文件)中删除所有预编译的头文件。相反,请包含库接口所依赖的所有头文件,就好像您根本没有使用预编译头。

使用此库时,将库头文件包含在用于生成预编译头的编译单元中(例如,通过向pch.h添加#include "mylib.h"指令)。有了这个,库接口及其所有依赖项都会在使用项目中进行预编译。

© www.soinside.com 2019 - 2024. All rights reserved.