Usando * Autotools *, como salvar a listagem do compilador em um arquivo por arquivo?

4

Por favor, entenda que estou usando o Autotools / Automake / Autoconf, e não posso usar o redirecionamento porque ele precisa ser aplicado por comando no arquivo make gerado por autotools.

Eu preciso de uma maneira de ter autotools criar um arquivo de criação que tenha provisões para gerar e salvar as listagens de compilador e / ou assembler associadas a cada fonte individual no pacote.

Minha primeira tentativa foi adicionar '-Wa, -acdhln -g' no CCFLAGS. Isso realmente produziu uma listagem c / assembler composta, mas foi para o terminal , não em um arquivo . Se eu capturasse a saída do make (usando redirecionamento), eu teria 47 listagens diferentes reunidas junto com comandos de compilação intercalados.

O que eu esperava que acontecesse, lendo de maneira otimista o documento do GCC Opções gerais - Usando o GNU Coleção de compiladores ,

-o file
Place output in file file. This applies to whatever sort of output is being produced, whether it be an executable file, an object file, an assembler file or preprocessed C code.

If -o is not specified, the default is to put an executable file in a.out, the object file for source.suffix in source.o, its assembler file in source.s, a precompiled header file in source.suffix.gch, and all preprocessed C source on standard output.

é para que os arquivos {file} .o e {file} .s apareçam, com base em "-o {file} .o" na linha de comando do GCC.

O que aconteceu é que a listagem da montagem aparentemente foi enviada para a saída padrão.

EDIT to add 23 Oct 2016. I now realize the documentation was talking about thing like the compiler output file passed as input to the assembler, and the assembler output file passed as input to the linker. Neither would be the assembler LISTING file which I want to capture.

This also applies to the using the -save-temps option; it would only save the output from the assembler, which is the linker input file, not the assembler listing file.

  • Uma interpretação alternativa do documento poderia implicar que cada arquivo de saída seria colocado no único arquivo nomeado no -o operando, seja intermisturado ou com o último arquivo criado sobreposto a arquivos criados anteriormente. (Por exemplo, a saída da passagem do compilador sobreposta com a saída da passagem do assembler sobreposta à saída da passagem de coleta.)

    Como isso parece ser contraproducente, presumi que o GCC (o executivo de nível superior) poderia ser inteligente o suficiente para ajustar o nome do arquivo para diferentes passadas. Isso não parece ser verdade.

  • Omitir o nome do arquivo a partir de "-o" pareceria exatamente o que é desejado, exceto que o arquivo objeto seja sempre chamado "a.out" em vez de "{source} .o". Por que uma constante para o nome da saída de origem foi escolhida não faz sentido para mim, mas uma etapa de renomeação após cada chamada do GCC poderia alterar "a.out" para "{source} .o".

  • Consultar a documentação do GNU Assembler diz ainda menos sobre -o e não tem opção para lidar com a listagem de saída. Uma versão assembler, a tigcc, documenta que a listagem é emitida como saída padrão.

    • As revisões do GNU e do GNU Build Standard para o Unix não resolveram isso?

    • (Eu sou louco ou estou vivendo em uma un-realidade chamada Unix ??)?

Agora, parece que o Make precisa informar ao GCC que, quando a etapa de montagem for executada, essa saída padrão deverá ser colocada no arquivo $ @. s. Eu suspeito que isso não pode ser feito, dado como as opções do GCC parecem se comportar (e uma rápida olhada em como os arquivos de especificações são usados). Talvez o Automake (ou libtools?) Possa criar uma operação de compilação multi-escalonada, separando as várias etapas para que a saída da montagem possa ser capturada.

Mas, como o arquivo make é gerado por autotools, preciso de uma maneira de dizer ao autotools para criar o arquivo make que criará / capturará o arquivo de saída do assembly. Essa tarefa parece exigir a reescrita de algumas das regras e / ou macros do autoconf / automake.

Por fim, estou trabalhando com um pacote criado por outra pessoa usando o autotools, o tar-balled up e baixado para mim. Eu não fiz a embalagem do autotools, e eu não criei os arquivos gigantes * .ac, e não quero hackeá-los, se é que isso é evitável.

Eu só preciso de alguns mapas de montagem e link para tentar depurar um problema com o pacote.

    
por HiTechHiTouch 22.10.2016 / 09:26

1 resposta

1

Eu finalmente desmoronei e escrevi um programa real que analisava a saída do terminal capturado e extraía os arquivos de listagem. Embora funcione para o meu sistema específico / configuração / pacote de compilação, não posso oferecer nada além de um exemplo. Certamente não é uma ferramenta prontamente utilizável.

Me desculpe, isso realmente não é uma resposta geral para superar um curto prazo de autotools.

    
por 27.10.2016 / 23:25