假设我使用一些 C 或 C++ 库,由头文件和一些源文件组成,这些库被编译成我可以链接的静态或共享库。
在库的标题(数十个......或数百个文件)中,定义了一些宏/符号。
现在我想在一个项目中使用这个库,它还定义了一些宏和符号。当然,我想避免名称冲突,因为有时会出现这种情况,尤其是 windows.h。但更一般地说,我想控制从该标题中真正导出的内容。
我可以使用 gcc 预处理器选项生成已定义符号的列表:
gcc -E -dM include/great_lib.h | sort -V >symbols.txt
这会在文件 symbols.txt 中输出包含此标头的用户文件中包含的所有已定义符号的排序列表。
但是,它只给出符号,而不是定义它的文件。
我觉得这可能是一个有用的信息。例如,检查某些系统宏是否在“great_lib.h”或其上级中被重新定义。不幸的是,在检查gcc 预处理器选项后,我看不到使用 gcc 的方法。
例如,而不是只给我:
#define M_PI 3.14159265358979323846
它会产生
#define M_PI 3.14159265358979323846; /usr/include/math.h
也许与 -dN 选项有关?但是它的输出让我感到困惑,它需要进一步的文本处理,而且我不明白信息是如何分层的。还是更简单的方法?
相关问题: