我有一个VisualStudio2017 C++项目,它使用预编译的头(stdafx.h)。
我的(简化)文件结构如下:
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>。
stdafx.h之后,所有三个文件( stdafx.h、code1.cpp和code2.cpp )都会被重新编译(如预期的那样)。code1.cpp之后,只会重新编译code1.cpp (如预期的那样)。header2.cpp后,将重新编译所有三个文件stdafx.h、code1.cpp和code2.cpp (not!)。我希望第3项只编译code2.cpp,而不是编译其他所有内容。
出现这种行为的一个可能原因是,构建管理器无法检查和遵循#include指令,因此只要修改了任何头文件,它就会重新编译所有内容。
因为我的项目很大,所以重新编译像code1.cpp这样的所有文件需要花费大量的时间。我故意不包括来自stdafx.h的stdafx.h,因为我知道我会经常修改header2.hpp,只有code2.cpp才需要使用它。(header2.hpp是一个模板库,它只具有code2.cpp所需的功能。)
是否需要这种行为,我如何才能让Visual认识到其他文件不需要重新编译?
发布于 2017-11-04 05:57:49
结果,一年前我已经禁用了预编译头(但将stdafx.h和stdafx.cpp留在了项目中),当我想再次使用它们时,我忘了打开/Yc和Yu选项。
没有出现错误,Visual一直像普通的stdafx.cpp文件一样编译.cpp。
另外,我对预编译头是如何工作的有错误的想法。我认为stdafx.h是自己编译的(然后通过某种中间表示形式转储到#include "stdafx.h"的那些.cpp文件中),但实际上被编译的文件是stdafx.cpp (编译时生成.pch文件)。(根据this question.)
打开预编译头选项后,当我修改header2.cpp时,只会像我希望的那样重新编译code2.cpp。
而且,编译时间现在大大加快了。
https://stackoverflow.com/questions/47099996
复制相似问题