将 non-included header 文件添加到 up-to-date 签入 Visual Studio 项目

Add non-included header file to up-to-date check in Visual Studio project

我正在使用 Microsoft Visual Studio 2017,我用 C++ 编写代码。

header 文件中的 #define 设置始终存在一个问题。第一种方法是将设置放在与特定源文件对应的多个 header 文件中。这种方法适用于最小重建,但主要缺点是设置存储在多个文件中。

另一种方法是将所有定义存储在一个config.h 文件中并将其包含到所有源文件中。配置起来要容易得多,但是每次我更改设置时,包括 config.h 在内的所有文件都会重新编译。

所以我决定使用第三种方法。所有设置都存储在 config.h 中(每个项目一个),并且在它们之前有一个特殊的注释行,其中包含确切的 header 文件的相对路径,如下所示:

// in:core/net/http.h
// some http setting
#define CFG_SOME_HTTP_OPTION

// in:core/net/dns.h
// some dns setting
#define CFG_SOME_DNS_OPTION

但是config.h本身没有被任何源文件包含。相反,它由 pre-build 脚本解析,该脚本为 config.h 中提到的每个 header 文件构建一个包含所有定义的代码。然后检查此代码是否与特定 header 中已经存在的代码不同,并且仅当代码不同时才进行替换。这种方法保留了之前两种方法的优点,因为所有设置仍然在一个 header 文件中,但只有那些设置已更改的文件才会被重建。

我写了这个脚本,除了一件事之外,一切都很完美。 config.h 是项目的一部分,但不包含在任何源文件中。这就是为什么 Visual Studio 甚至 运行 我的 pre-build 脚本因为 up-to-date 检查:如果仅在 config.h 中进行更改,它仍然认为项目是 up-to-date.

我该如何解决这个问题?最简单的方法是为每个项目创建包含 config.h 的特殊源文件,但如果只修改 config.h,也许还有另一种方法强制构建过程?

已解决。

刚刚将 Item Type 更改为 C/C++ compiler 而不是 config.h 属性中的 C/C++ header