【问题标题】:Make file dependency chart with multiple dependencies制作具有多个依赖关系的文件依赖关系图
【发布时间】:2014-02-07 22:32:30
【问题描述】:

我对制作文件非常陌生,并且正在尝试为我的程序绘制依赖关系图,并且可以使用一些帮助来确定这些依赖关系的细节。我正在引用this 之类的图表,但我的程序包含比该示例“更深”的依赖层,我不确定在 make 文件中应该如何处理这些依赖关系。我追求的是this

我的程序结构如下:

其中箭头表示箭头头部的头文件包含在箭头尾部的头文件中。没有派生类,如果这很重要的话。

感谢您的帮助!

【问题讨论】:

  • 你可以尝试实现s.th。像这样使用 doxygen。

标签: c++ makefile


【解决方案1】:

通过检查,您的 makefile 应如下所示:

main: main.o ChiSquared.o StatTests.o ChiSquaredTest.o KS.o ChiSquared.o
    $(CXX) $(CXXFLAGS) -o main $^

ChiSquared.o: ChiSquared.cpp ChiSquared.h GaussQuad.h

ChiSquaredTest.o: ChiSquaredTest.cpp ChiSquaredTest.h ChiSquared.h GaussQuad.h

KS.o: KS.cpp KS.h ChiSquared.h GaussQuad.h

StatTests.o: StatTests.cpp StatTests.h ChiSquaredTest.h KS.h ChiSquared.h GaussQuad.h

Main.o: Main.cpp  StatTests.h ChiSquaredTest.h KS.h ChiSquared.h GaussQuad.h

(注意使用自动变量$^,而不是明确的目标文件列表。)

注意两点:

1) 我敢打赌,您实际上并不需要 #include 将所有这些头文件放在一起;在高级别上过多使用#include 会导致不必要的依赖,从而导致不必要的重建。

2) 无需在 makefile 中手动维护这些先决条件列表; Make可以为您做到。但这是一项先进的技术,所以让我们先让您的简单 makefile 工作。

【讨论】:

  • 谢谢!我必须为每个 make 规则添加一些编译命令,但它似乎正在工作。至于#include,如果包含另一个类的类使用方法或创建包含类的实例,是否有更好的方法?
  • 奇怪的是你必须添加这些规则; Make 有一个从%.cpp 构建%.o 的隐含规则,因此它不是必需的。至于#include,是的,有更好的方法:如果StatTests.cpp 使用KS 的实例并调用KS::foo() 但*StatTests 没有KS 成员*, then you can forward-declare KS` StatTests.h#include KS.hStatTests.cpp。这样main.o 就不会(必然)依赖于KS.h
猜你喜欢
  • 2019-08-10
  • 2013-11-05
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多