web-dev-qa-db-ja.com

makefileをJSONコンパイルデータベースに変換する方法

プロジェクトにmakeファイル(cmake/premake/ninjaなどではない)があり、gccとclangで機能するとします。それらからJSONコンパイルデータベースを生成して、clang-modernizeツールにフィードします。そのようなことをする方法? (clangインフラストラクチャまたはmake CC='cc_args.py gcc' CXX='cc_args.py g++'のような使用法のスクリプトまたは他のツールにパーサーはありますか?)

32
DuckQueen

私は個人的な経験はありませんが、 Bear はあなたのシナリオをターゲットにしているようです。 (clang-modernizeサイトからリンクされていました。)

21
Etan Reisner

Makeには、コンパイラのコマンドラインを標準出力に出力するという通常は望ましくない機能がありますが、この場合は、シェル(および jq )パイプラインで使用できます。 GNU Make の場合:

make --always-make --dry-run \
 | grep -w 'gcc|g++' \
 | grep -w '\-c' \
 | jq -R '[inputs|{directory:".", command:., file: match(" [^ ]+$").string[1:]}]' \
 > compile_commands.json

ただし、これは、makefileが-C引数を使用してサブディレクトリ内で自身(または他のmakefile)を再帰的に呼び出す場合は処理しません。

1
Tanz87