Existe uma maneira de saber quais opções foram usadas no tempo de compilação?

3

Veja a seguinte linha de comando:

gcc -o hello -Wall -D_BSD_SOURCE hello-world.c

Agora, existe uma maneira de saber sobre essas opções fazendo algum processamento no executável 'olá'.

    
por rsjethani 03.11.2012 / 10:16

3 respostas

8

Infelizmente, não. Mas se você pensar sobre isso antes de criar um binário, existem algumas maneiras. Aqui está outro. Com o gcc recente, você pode usar a opção -frecord-gcc-switches, que adicionará uma seção ao arquivo ELF com a descrição que você está procurando.

$ 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

Como você pode ver, mostra todas as opções usadas, não apenas aquelas que você forneceu explicitamente.

    
por 22.11.2012 / 22:04
3

Impossível, mas a versão do compilador pode estar disponível se você não remover o binário.

Se você se referir ao material da macro, isto é, #ifdef HAVE_XXX , ele foi registrado no arquivo de origem C / C ++. Dê uma olhada nas cadeias de ferramentas GNU autogen .

    
por 03.11.2012 / 10:25
3

De jeito nenhum, mas se você usar o Makefile, existe uma maneira:

TARGET=hello
CFLAGS=-Wall -D_BSD_SOURCE hello-world.c
all:
    cc -o $(TARGET) $(CFLAGS) -DCFLAGS="\"$(CFLAGS)\""
    
por 03.11.2012 / 10:26

Tags