
Por favor, entenda que estou usando Autotools/Automake/Autoconf, eNão consigo usar o redirecionamentopois precisa ser aplicado comando por comando no arquivo make gerado pelo autotools.
Eu preciso de uma maneira de fazer com que o autotools crie um arquivo make que tenha provisões para gerar e salvar as listagens do compilador e/ou assembler associadas a cadaIndividualfonte no pacote.
Minha primeira tentativa foi adicionar '-Wa,-acdhln -g' ao CCFLAGS. Isso de fato produziu uma listagem composta c/assembler, masfui para o terminal,não em um arquivo. Se eu capturasse a saída do make (usando redirecionamento), teria 47 listagens diferentes agrupadas junto com comandos de construção intercalados.
O que eu esperava que acontecesse, lendo com otimismo o documento do GCCOpções Gerais - Usando a Coleção de Compiladores GNU,
-o arquivo
Coloca a saída no arquivo arquivo. Isso se aplica a qualquer tipo de saída que esteja sendo produzida, seja um arquivo executável, um arquivo objeto, um arquivo assembler ou código C pré-processado.Se -o não for especificado, o padrão é colocar um arquivo executável em a.out, o arquivo objeto para source.suffix em source.o, seu arquivo assembler em source.s, um arquivo de cabeçalho pré-compilado em source.suffix.gch e todas as fontes C pré-processadas na saída padrão.
é 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 do assembly aparentemente foi enviada para a saída padrão.
EDIT para adicionar 23 de outubro de 2016. Agora percebo que a documentação estava falando sobre coisas como o arquivo de saída do compilador passado como entrada para o assembler e o arquivo de saída do assembler passado como entrada para o vinculador. Nem seria o arquivo assembler LISTING que desejo capturar.
Isso também se aplica ao uso da opção -save-temps; ele salvaria apenas a saída do assembler, que é o arquivo de entrada do vinculador, não o arquivo de listagem do assembler.
Uma interpretação alternativa do documento poderia implicar que cada arquivo de saída seria colocado em um único arquivo nomeado no operando -o, misturado ou com o último arquivo criado sobreposto aos arquivos criados anteriormente. (Por exemplo, a saída da passagem do compilador sobreposta à 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 passagens. Isto não parece ser verdade.Omitir o nome do arquivo de "-o" pareceria exatamente o que se deseja, exceto que o arquivo objeto é sempre denominado "a.out" em vez de "{source}.o". Por que uma constante para o nome de saída de origem foi escolhida não faz sentido para mim, mas uma etapa de renomeação após cada invocação do GCC pode mudar "a.out" para "{source}.o".
Consultando oDocumentação do GNU Assemblydiz ainda menos sobre -o e não tem opção para lidar com a listagem de saída. Uma versão do assembler, tigcc, documenta que a listagem é emitida como saída padrão.
As revisões do GNU e do GNU Build Standard para Unix não resolveram isso?
(Estou louco ou estou apenas vivendo em uma irrealidade chamada Unix? ? ?)
Então agora parece que o Make precisa informar ao GCC que quando a etapa de montagem for executada, essa saída padrão deve ser colocada no[e-mail protegido]arquivo. Suspeito que isso não possa ser feito, dada a forma 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 em várias etapas, separando as várias etapas para que a saída do assembly possa ser capturada.
Mas,como o arquivo make é gerado pelo autotools, preciso de uma maneira dediga ao autotools para criar o arquivo makeque criará/capturará o arquivo de saída do assembly. Esta tarefa parece exigir a reescrita de algumas regras e/ou macros do autoconf/automake.
Finalmente, estou trabalhando com um pacote que outra pessoa criou usando autotools, compactado em tar e baixado para mim. Eu não fiz o empacotamento do autotools e não criei os arquivos *.ac gigantes, e não quero hackeá-los, se é que é possível evitá-los.
Eu só preciso obter alguns mapas de montagem e link para tentar depurar um problema com o pacote.
Responder1
Finalmente desabei e escrevi um programa real que analisava a saída capturada do terminal e extraía os arquivos de listagem. Embora funcione para meu sistema/configuração de compilação/pacote específico, não posso oferecê-lo como nada mais do que um exemplo. Certamente não é uma ferramenta facilmente utilizável.
Lamento que esta não seja realmente uma resposta geral para superar uma deficiência das ferramentas automáticas.