C++ Qt上的预编译_头和子文件模板
我有一个很大的Qt项目,分为几个静态库(大约70个)和一个应用程序,为此,我使用了一个带有subdirs模板的.pro文件 为了加快编译时间,我想使用预编译头,并发现在每个子项目上使用预编译头可以做到这一点,但是,每个项目单独编译预编译头(这是最慢的步骤) 有一种方法可以在SubDRS模板?中包含的所有子项目之间“共享”预编译头,因此预编译头可以构建一次,并供所有子项目使用C++ Qt上的预编译_头和子文件模板,c++,qt4,C++,Qt4,我有一个很大的Qt项目,分为几个静态库(大约70个)和一个应用程序,为此,我使用了一个带有subdirs模板的.pro文件 为了加快编译时间,我想使用预编译头,并发现在每个子项目上使用预编译头可以做到这一点,但是,每个项目单独编译预编译头(这是最慢的步骤) 有一种方法可以在SubDRS模板?中包含的所有子项目之间“共享”预编译头,因此预编译头可以构建一次,并供所有子项目使用 关于如果每个标头将分别编译为其自己的pch,那么这可能会起作用。 不幸的是,据我所知,在C++项目中,只有一个翻译单元用于
关于如果每个标头将分别编译为其自己的pch,那么这可能会起作用。 不幸的是,据我所知,在C++项目中,只有一个翻译单元用于每个项目可以全局使用的预编译头。
嗯,您可以对所有项目使用一个全局文件,但这是最有效的:这可能会导致生成时间增加,因为每次更改预编译头时,都必须重新生成所有文件。只是一个建议-您可能希望尝试使用cmake。它同时支持qt和pch,并且它当前的pch支持也存在同样的问题。与pch相关的宏包含在一个单独的易于理解的文件中,并且可以重写,以便为多个子文件夹创建一个大型pch文件。这就是我打算为我的qt项目解决相同问题的方法。经过一些实验后,我发现无法在子项目之间共享预编译的头文件。我认为缺少此功能的基本原理是,每个子项目都可能更改编译器/预处理器标志,这将使为一个子项目构建的预编译头与其他子项目不兼容
共享的预编译头对于一些简单的项目可能很有用,在这些项目中,编译器标志也是共享的,但我想检测和处理与此条件的偏差对qmake来说太麻烦了。不幸的是,没有官方的方法。 不过,您可以使用一些黑客技术来至少获得基本的PCH支持 我曾经
PRECOMPILED_HEADER = ../includes.h
在一个项目中,只创建.pch,然后在实际项目的一些公共.pri文件中“模拟”预编译_头的后半部分。例如,在VS中,您可以使用以下内容:
QMAKE_CXXFLAGS += /FIincludes.h /Yuincludes.h /Fppath/to/1stproj/intdir/projname_pch.pch
#QMAKE_CXXFLAGS += /wd4651
QMAKE_LFLAGS += path/to/1stproj/intdir/projname_pch.obj
您可能会遇到不同的问题,例如:
- 如果编译器标志差异过大(请参阅上面的wd4651)
- 它也不适用于pdb文件的ootb。改用/Z7
- 使用gcc时,您可能会遇到不兼容的-fPIC选项
- 等等