首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Visual 2017继续重新编译stdafx.h?

Visual 2017继续重新编译stdafx.h?
EN

Stack Overflow用户
提问于 2017-11-03 16:05:43
回答 1查看 501关注 0票数 1

我有一个VisualStudio2017 C++项目,它使用预编译的头(stdafx.h)。

我的(简化)文件结构如下:

代码语言:javascript
复制
header1.hpp
header2.hpp
stdafx.h -> includes header1.hpp
code1.cpp -> includes stdafx.h
code2.cpp -> includes stdafx.h and header2.hpp

为了避免任何歧义,我说includes header1.hpp,我的意思是文件中有一行#include <header1.hpp>

  1. 在我修改stdafx.h之后,所有三个文件( stdafx.hcode1.cppcode2.cpp )都会被重新编译(如预期的那样)。
  2. 在我修改code1.cpp之后,只会重新编译code1.cpp (如预期的那样)。
  3. 修改header2.cpp后,将重新编译所有三个文件stdafx.hcode1.cppcode2.cpp (not!)。

我希望第3项只编译code2.cpp,而不是编译其他所有内容。

出现这种行为的一个可能原因是,构建管理器无法检查和遵循#include指令,因此只要修改了任何头文件,它就会重新编译所有内容。

因为我的项目很大,所以重新编译像code1.cpp这样的所有文件需要花费大量的时间。我故意不包括来自stdafx.hstdafx.h,因为我知道我会经常修改header2.hpp,只有code2.cpp才需要使用它。(header2.hpp是一个模板库,它只具有code2.cpp所需的功能。)

是否需要这种行为,我如何才能让Visual认识到其他文件不需要重新编译?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-04 05:57:49

结果,一年前我已经禁用了预编译头(但将stdafx.hstdafx.cpp留在了项目中),当我想再次使用它们时,我忘了打开/YcYu选项。

没有出现错误,Visual一直像普通的stdafx.cpp文件一样编译.cpp。

另外,我对预编译头是如何工作的有错误的想法。我认为stdafx.h是自己编译的(然后通过某种中间表示形式转储到#include "stdafx.h"的那些.cpp文件中),但实际上被编译的文件是stdafx.cpp (编译时生成.pch文件)。(根据this question.)

打开预编译头选项后,当我修改header2.cpp时,只会像我希望的那样重新编译code2.cpp

而且,编译时间现在大大加快了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47099996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档