私はgnugccとarmccを使用していくつかのCファイルをコンパイルしています。どのコンパイラがどのファイルをコンパイルしたかに関する情報を取得するにはどうすればよいですか?
例:test.cppはarmccまたはgnugccによってコンパイルされています。
makefileは非常に複雑で、どのコンパイラがどのファイルをコンパイルしたかを確認できるコマンドを探しています。
何か案は?
16進エディターでファイルを調べて、コンパイラーがその名前をファイルに書き込んだかどうかを確認できる場合があります。
より簡単な方法があるかどうかはわかりませんが、gccを使用してバイナリに埋め込まれていることがわかります(少なくとも私のプラットフォームでは):
$ hexdump -C foo | grep -A2 GCC
00001030 00 00 00 00 00 00 00 00 47 43 43 3a 20 28 55 62 |........GCC: (Ub|
00001040 75 6e 74 75 2f 4c 69 6e 61 72 6f 20 34 2e 37 2e |untu/Linaro 4.7.|
00001050 32 2d 32 32 75 62 75 6e 74 75 33 29 20 34 2e 37 |2-22ubuntu3) 4.7|
一部のコンパイラは、コンパイラの名前とバージョンをバイナリに埋め込みますが、すべてではありません。必要な情報をバイナリに埋め込むこともできます。
gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c
で使用するのと同じように、任意の場所でtemp.c
マクロを使用します。この文字列リテラルが生成されたバイナリファイルに埋め込まれるようにします。この文字列を未使用の変数に割り当てないでください。最適化のため、コンパイラは埋め込まれません。COMPILER_DETAILS
printf