6

我试图绕过 /YC 和 /MP 互斥的限制。我想利用预编译的头文件和多进程编译。

到目前为止,我的回答是创建 2 个项目而不是 1 个。第一个是 pch 生成库,仅包含 stdafx.h 和 stdafx.cpp。它生成 pch 文件,并在 stdafx.cpp 上设置了 /YC

该库成功生成pch文件!作为旁注,pch 库项目还指定了 /YU 指向其 stdafx.h 和 /Fp 引用输出 pch 文件。

我的第二个项目是我的主要可执行文件。它指定了 /MP,但没有为任何文件指定 /YC,并且不包含 stdafx.h 或 stdafx.cpp。相反,我将项目的 /YU 设置为 pch 库的 stdafx.h,将 /Fp 设置为 pch 库生成的 pch。然后我将 pch 库设置为 exe 项目的依赖项。我还在 exe 项目上设置了 /FI 以强制将 pch 库中的 stdafx.h 包含在每个编译单元中。

我的问题是,虽然 pch 库确实生成了 pch 文件并且 exe 项目似乎确实正确引用了生成的 pch 文件,但只要 exe 项目开始构建(在一些与 pch 无关的预构建步骤之后),它删除了 pch 库生成的 pch。我想这是因为它认为,指定了/Fp,即使没有指定/YC,项目也会生成该文件。

我在这里做错了吗?我是不是少了一步。有没有办法阻止 exe 项目在开始构建之前删除我的 pch 文件?

任何帮助将不胜感激!

4

1 回答 1

9

试试这个:如果我使用 /Yc,Visual C++ 是否检查它是否需要重新生成它的 pch

您基本上为 stdafx.cpp 设置 /Yc,为所有其他 *.cpp 文件设置 /Yu + /MP。

要为每个文件单独设置标志,请右键单击解决方案资源管理器上的 cpp 文件并选择属性。

于 2013-06-05T05:52:36.627 回答