3

私はgnugccとarmccを使用していくつかのCファイルをコンパイルしています。どのコンパイラがどのファイルをコンパイルしたかに関する情報を取得するにはどうすればよいですか?

例:test.cppはarmccまたはgnugccによってコンパイルされています。

makefileは非常に複雑で、どのコンパイラがどのファイルをコンパイルしたかを確認できるコマンドを探しています。

何か案は?

4

3 に答える 3

2

16進エディターでファイルを調べて、コンパイラーがその名前をファイルに書き込んだかどうかを確認できる場合があります。

于 2013-03-14T19:15:14.517 に答える
2

より簡単な方法があるかどうかはわかりませんが、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|
于 2013-03-14T19:15:25.583 に答える
0

一部のコンパイラは、コンパイラの名前とバージョンをバイナリに埋め込みますが、すべてではありません。必要な情報をバイナリに埋め込むこともできます。

gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c

で使用するのと同じように、任意の場所でtemp.cマクロを使用します。この文字列リテラルが生成されたバイナリファイルに埋め込まれるようにします。この文字列を未使用の変数に割り当てないでください。最適化のため、コンパイラは埋め込まれません。COMPILER_DETAILSprintf

于 2013-03-14T20:11:16.007 に答える