我正在开发一个庞大的C ++代码库,目前我遇到了模块化代码的问题。我必须将我的代码分成独立的独立模块。
我能想到的一种方法是生成依赖图,然后进行更高级别的分类。其他方法是从入口点(某个函数abc()
)开始并生成一个函数调用树,其每个节点将包含该函数所在的文件的名称。此后,我可以使用一些脚本将这些功能提取到单独的模块中。
我的问题是,有什么工具可以帮助我完成这项任务吗?有没有人早点遇到这样的问题。或者你能建议任何方法来实现同样的目标吗?
答案 0 :(得分:5)
第一级模块化 - 我希望你已经完成了 - 在类中构建你的代码。如果你的代码只是函数的集合 - 即C加上一些语法的含义 - 那么重写你的代码是时候了,因为没有多少依赖图构建会让你免于维护地狱。
如果您拥有类,则模块化应该是找到密切协作的类(例如Customer
,Order
和Invoice
)并将它们分开来自只与它们失去联系的类(如Employer
或Facility
)。然后从那里拿走它。
模块化代码首先需要思想。没有自动程序可以替代它。实际上,从你写的很少的内容来看,我担心任何自动化过程都会使事情变得更糟,因为显然在这个项目上投入的思想太少了。即,你在不考虑模块化的情况下编写了100万行代码,现在你希望模块化发生,而仍然没有实际考虑它。你正前往史诗般的失败。
答案 1 :(得分:4)
获得一些概述doxygen可能有所帮助。但是你必须使用doxyfile设置来进行一些生成依赖性graps,如果你的代码库很大,你应该从生成的方法中禁用动态内容。 Doxygen可以使用graphviz创建包含,继承,调用和调用者图表。
这里很简单examples但它也适用于较大的{{3}}。 但doxygen只会给你一个概述,没有重构能力。
答案 2 :(得分:1)
我经常使用“了解C / C ++”来研究这些依赖关系。
如果代码库非常庞大并且您从头开始模块化,您可能需要查看其他一些工具,例如:
答案 3 :(得分:1)
听起来你正在寻找一个重构工具。试着看一下这个问题的答案:Is there a working C++ refactoring tool?
答案 4 :(得分:0)
一个方法有点长,但你可以做的是删除一个方法并编译以找到依赖关系,然后将decadencies分组到一个组件中。虽然这并不能完全解决您的问题,但这是一种开始的方法。