【问题标题】:How to avoid unneeded dependencies on headers如何避免对标头的不必要依赖
【发布时间】:2018-09-21 14:12:17
【问题描述】:

我使用 cmake 版本 3.11.0。 我有以下程序(在文件“c.c”中),其中标题 a.h 和 b.h 是 空:

#include "a.h"
#if 0
#include "b.h"
#endif
int main()
{
  return 0;
}

和 CMakeLists.txt:

add_executable(test c)

我运行“cmake”。配置它,然后“制作”。 一切都很好。 然后我“触摸 b.h”并再次运行“make” - Make 重建它!

我的意思是,标题 b.h 被排除在外,对它的任何更改都可能被忽略。 为什么对它有依赖? 这是设计使然吗? 可以避免吗?

谢谢

【问题讨论】:

    标签: cmake


    【解决方案1】:

    这被称为头文件依赖扫描器,它扫描源文件并提取#include-ed的头文件名称。

    因为是scanner,所以不会去检查#ifdef等逻辑,可能导致header没有被实际使用。

    您可以在 CMake 中使用 include_regular_expression 命令控制标头依赖扫描器。

    例如,您可以通过以下方式禁用扫描仪

    include_regular_expression("^$") # Regular expressions matches empty string only
    

    (从技术上讲,这不会完全禁用扫描过程,但会禁用源头依赖的生成)。

    【讨论】:

      【解决方案2】:

      所以,我可以将“b.h”重命名为“b.v” 并添加

      include_regular_expression("^.*[.](h|hpp|cpp|inl|inc)$")
      

      我的“b.v”标题将被排除在外。 似乎没有办法排除某些模式? 唯一要记住的是下次我确实需要“b.v”时手动强制完全重建 谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 2011-06-16
        • 2014-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多