2014-02-07 263 views
0

我很新来创建文件,并试图为我的程序绘制依赖关系图,并且可以使用一些帮助来计算出这些依赖关系的细节。我引用this类型的图表,但我的程序包含比该示例更“深层”的依赖关系层,我不确定这些应该如何在make文件中处理。我之后像this制作具有多个依赖关系的文件依赖关系图

我的程序结构如下: Program Dependency

,其中的箭头的意思是在箭头头部的头文件被包括在箭尾的。没有派生类,如果重要的话。

感谢您的帮助!

+1

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

回答

0

通过检查,你的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工作。

+0

谢谢!我不得不为每个make规则添加一些编译命令,但它似乎正在工作。至于'#include',如果包含另一个类的类使用方法或创建包含类的实例,那么有更好的方法吗? – bcf

+0

奇怪的是,你必须添加这些规则; Make有一个隐含的规则,用于从'%.cpp'建立'%.o',所以不需要。至于'#include',是的,还有更好的方法:如果'StatTests.cpp'使用'KS'的实例并且调用'KS :: foo()',但是'StatTests'没有'KS 'member' *,那么你可以在'StatTests.h'中转发声明'KS',在'StatTests.cpp'中转发'#include KS.h'。这样''main.o'不(必然)依赖于'KS.h'。 – Beta