首先介绍一下背景知识
:我正在使用Visual Studio 2017-专业增补
开发本机C ++ android应用程序
我使用了标准模板。因此,我有一个纯c ++(11)库,所有代码都在其中。在主项目中定义了一个预编译的标头,该标头链接到我的库。
我在做什么
我正在处理一些需要大量嵌入数据的代码。
我四处寻找实现此目的的好方法,但是大多数方法似乎很麻烦,并且几乎总是有评论说仅将数据直接放入头文件中,这是最可移植的方法。
所以我现在有一些头文件,这些头文件基本上包含静态数据数组。 注意,它们不是“ const”,就像您这样做一样,如果您碰巧在变量定义上移动,Visual Studio 2017将尝试显示数据。所以只是静态的。
然后将所有头文件聚合到一个头文件中,然后最终在标准cpp文件中引用该头文件。有效地将数据私有化给该类。
一切正常。但是编译时间变得非常缓慢。而且,如果我看到输出窗口,我可以看到它在cpp文件上花费了80%的时间(即使数据或代码没有更改)
现在这不是编译器可以做的最好的事情。我希望编译器跳过此操作,因为没有直接影响cpp文件的更改。
我还试图将内容移动到预编译的头文件中。但这只是使pch.h文件每次都要花很多时间才能构建。
那我在做什么错了?
更新
我仔细检查了文件没有更改。 如果我按F6(生成),然后再按一次,它仍将重建大型文件。
我还尝试过重新处理静态数据,以便在cpp文件中定义它。 但这仍然没有区别。
为清楚起见,这是一个示例:
.cpp文件:
#include "Some.h"
unsigned char _someData[] =
{
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
};
unsigned char* Some::GetSomeData(void)
{
return _someData;
}
.h文件:
#pragma once
class Some
{
public:
static unsigned char* GetSomeData(void);
};
答案 0 :(得分:2)
为节省编译时间,请尝试以下操作:
extern
。#include <file>
和#include "file"
之间的区别。如果您选择了错误的包含方法(例如使用<>包含文件,或使用“”表示系统包含),则会花费更多时间搜索文件。即使没有更改,如果您不知道为什么要重建或重新编译项目或文件,也可以按以下步骤进行操作:
祝你好运
答案 1 :(得分:1)
您可以考虑使用程序启动时读取的数据文件(代码之外)。这样会增加一些开销(文件读取时间),但是您会解决编译时间问题。