【问题标题】:Add non-included header file to up-to-date check in Visual Studio project将未包含的头文件添加到 Visual Studio 项目中的最新检查
【发布时间】:2022-01-08 00:18:55
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: c++ visual-studio build


    【解决方案1】:

    解决了。

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

    【讨论】:

    • 您好 cls,很高兴知道您找到了解决此问题的解决方案!请考虑回答并接受它作为将其状态更改为已回答的答案。见can I answer my own question..,只是一个提醒:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多