我想知道是否有一个现有工具列出一组C ++源文件的外部依赖关系(例如,一个项目中有多个目录的一个目录)。在概念上类似于查找二进制文件的外部符号,但是会跨越一组源文件。
一个示例用例将用于处理整个代码库,以了解其中的依赖性。例如,开发人员可能会问这样一个问题:src/module1
中的代码还依赖于代码库的其他部分?
例如,如果此工具在以下car.cc
文件上运行,它将列出Vehicle
和std::cout
。如果同时在两个源文件上运行它,它将仅列出std::cout
(因为Vehicle已在源文件集中定义)。
// vehicle.h
class Vehicle {
};
// car.cc
#include "vehicle.h"
class Car: public Vehicle {
public:
void honk() {
cout << "Honk! \n" ;
}
};
该工具最好在Linux上可用,并支持过滤掉一些引用(例如std :: *)。
答案 0 :(得分:2)
是的,有。它称为nm
,列出了给定的编译目标文件导出/需要的所有符号。要查看对象所需的所有符号,可以运行
nm <object-file> | grep ' U '
其中grep
命令仅过滤出未定义的符号。看看手册页,看看其他类型字符的含义。
但是请注意,C ++使用名称修饰:类似的功能
int foo(int a);
可以用类似
的符号表示_Z3fooi
将其参数的类型编码为符号名称。这对于使函数重载起作用很重要,但实际上使符号名几乎无法读取。