我现在正在解决问题,它的声明 - 生成文本文件,其中包含 .CPP 文件中所有声明的全局变量的列表。
我想出了几个想法,第一个:
尝试使用 ctags,所以我写了一些简短的脚本:
while read line
do
echo $line
printf "%s" $line >> report.txt
ctags -x --c++-kinds=v --file-scope=no "{$line}" | sort | sed "/const/d" | awk '{printf " %s", $1}' >> report.txt
printf "\n" >> report.txt
done < cpp_source_file_list.txt
这段代码从 cpp_source_file_list.txt 获取 .cpp 源文件的文件名,扫描它以查找全局变量(忽略 const)并写入报告“文件名 [变量列表]。我遇到的主要问题是 ctags 忽略的行为非常奇怪在某些情况下,STL 类型。
例如,它可以排除行 ike "vector v;",但包括 "std::vector v;"。
有没有办法解决这样的问题?尝试使用 ctags -I ./id.txt 附加键并手动列出要覆盖的标识符,但这也会带来不正确的结果。
第二种方式:
使用 nm 命令,例如:
nm builtsource.o | grep '[0-9A-Fa-f]* [BCDGRS]'
但在这种情况下,我会收到不必要的信息,例如:
0000000000603528 B M
0000000000603548 B N
0000000000603578 B _ZSt3cin@@GLIBCXX_3.4 <- (!)
0000000000603579 B _ZSt4cout@@GLIBCXX_3.4 <- (!)
0000000000603748 B t
现在我不知道如何改进这些方法之一以从任意 .cpp 源文件中接收有关声明的全局变量列表的正确信息。我很高兴听到有关此问题的任何建议。