gcc má -frecord-gcc-switches
možnost pro to:
-frecord-gcc-switches
This switch causes the command line that was used to invoke the compiler to
be recorded into the object file that is being created. This switch is only
implemented on some targets and the exact format of the recording is target
and binary file format dependent, but it usually takes the form of a section
containing ASCII text.
Poté budou spustitelné soubory ELF obsahovat .GCC.command.line
sekce s těmito informacemi.
$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out
String dump of section '.GCC.command.line':
[ 0] a.c
[ 4] -mtune=generic
[ 13] -march=x86-64
[ 21] -O2
[ 25] -frecord-gcc-switches
Samozřejmě to nebude fungovat pro spustitelné soubory zkompilované bez této možnosti.
V jednoduchém případě optimalizace můžete zkuste použít debugger, pokud byl soubor zkompilován s informacemi o ladění. Když to trochu projdete, můžete si všimnout, že některé proměnné byly „optimalizovány“. To naznačuje, že došlo k optimalizaci.
Další možností je -grecord-gcc-swtiches (poznámka, ne -f, ale -g). Podle dokumentů gcc to vloží příznaky do informací o ladění trpaslíků. A vypadá to, že je ve výchozím nastavení povoleno od gcc 4.8.
Zjistil jsem, že program dwarfdump je užitečný k extrahování těchto cflags. Všimněte si, že program strings je nevidí. Zdá se, že informace o trpaslíkech jsou komprimované.
Pokud kompilujete s -frecord-gcc-switches
flag, pak budou možnosti kompilátoru příkazového řádku zapsány binárně v sekci poznámek. Viz také dokumenty.