将 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
。
我正在使用 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
。