私は現在、問題、そのステートメントに取り組んでいます-.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 を無視して) レポート "filename [変数のリスト] を書き込みます。私が遭遇した主な問題は、ctags が無視して非常に奇妙な動作をすることです。場合によっては STL タイプ。
たとえば、「vector v;」という行を除外して、「std::vector v;」を含めることができます。
このような問題を解決する方法はありますか? ctags -I ./id.txt 追加キーを使用して、オーバーライドする識別子のリストを手動で作成しようとしていますが、誤った結果ももたらします。
2 番目の方法:
次のような 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
そして今、これらのメソッドの1つを改善して、宣言されたグローバル変数のリストに関する正しい情報を任意の.cppソースファイルから取得する方法がわかりません。この問題について何か提案をいただければ幸いです。