次のコマンドラインを見てください。
gcc -o hello -Wall -D_BSD_SOURCE hello-world.c
「hello」実行可能ファイルに対していくつかの処理を実行してこれらのオプションを理解する方法はありますか?
答え1
残念ながらそうではありません。しかし、バイナリを作る前に考えてみると、いくつかの方法があります。ここにもう一つあります。最近のgccでは、探している説明を含むELFファイルにセクションを追加する-frecord-gcc-switchesオプションを使用できます。
$ gcc -frecord-gcc-switches -o hello -Wall -D_BSD_SOURCE hello-world.c
$ readelf -p .GCC.command.line hello
String dump of section '.GCC.command.line':
[ 0] -D _BSD_SOURCE
[ f] hello-world.c
[ 1d] -mtune=generic
[ 2c] -march=x86-64
[ 3a] -Wall
[ 40] -frecord-gcc-switches
ご覧のとおり、明示的に提供されたオプションだけでなく、使用されているすべてのオプションも表示されます。
答え2
できませんが、バイナリを削除しない場合は、コンパイラのバージョンを使用できます。
マクロに関する内容について言及すると、#ifdef HAVE_XXX
C / C ++ソースファイルに文書化されています。 GNUツールチェーンを見てくださいautogen
。
答え3
方法はありませんが、Makefileを使用している場合は別の方法があります。
TARGET=hello
CFLAGS=-Wall -D_BSD_SOURCE hello-world.c
all:
cc -o $(TARGET) $(CFLAGS) -DCFLAGS="\"$(CFLAGS)\""