Como listar os pré-requisitos externamente no GNU Make?

4

Como posso consultar os pré-requisitos de um alvo de um Makefile GNU?

Por exemplo se os alvos especificados assim:

fred: wilma barney betty

Eu quero imprimir os pré-requisitos de fred da seguinte forma:

$ make some_action fred
wilma barney betty
    
por Alex B 26.09.2011 / 15:27

3 respostas

4

Talvez uma corrida seca seja o que você está procurando?

make --dry-run fred

A página man dá-nos a seguinte informação:

-n, --just-print, --dry-run, --recon
  Print the commands that would be  executed,  but  do  not 
  execute them.

Por isso, não lhe dará uma lista direta, mas uma lista indireta, já que você sabe que ele gostaria de executar o que ele depende.

    
por 26.09.2011 / 16:06
2

Outra possibilidade, embora uma que forneça mais informações do que você deseja, é a opção "imprimir banco de dados". Do manual:

   ‘-p’
   ‘--print-data-base’
      Print the data base (rules and variable values) that results from reading the
      makefiles; then execute as usual or as otherwise specified. This also prints the
      version information given by the ‘-v’ switch (see below). To print the data base
      without trying to remake any files, use ‘make -qp’. To print the data base of
      predefined rules and variables, use ‘make -p -f /dev/null’. The data base output
      contains file name and line number information for recipe and variable
      definitions, so it can be a useful debugging tool in complex environments.

Aviso justo, no entanto: peneirar essa bagunça será brutal sem algum pós-processamento.

    
por 27.06.2014 / 13:54
0

Digamos que o seu Makefile seja este:

.PHONY: wilma barney betty fred: wilma barney betty

A versão mais recente do remake tem uma opção --profile que gera dados que podem ser transformados em um gráfico das dependências verificado. O formato de saída do arquivo de dados é o que o callgrind usa, portanto, outro programa é necessário para produzir os gráficos a partir dos dados que são enviados. Consulte o link

Em uma versão mais antiga do remake, veja como você pode obter as dependências usando

$ remake -X -f Makefile
GNU Make 4.1+dbg0.91
Built for x86_64-unknown-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
Copyright (C) 2015 Rocky Bernstein.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Updating makefiles....
Updating goal targets....
 File 'fred' does not exist.
   File 'wilma' does not exist.
  Must remake target 'wilma'.
  Successfully remade target file 'wilma'.
<- (/tmp/??:0)
wilma
remake<0> target fred depend

fred: wilma barney betty
remake<1> quit
remake: That's all, folks...

Se você colocar esses comandos em um arquivo, diga cmds.txt :

target fred depend quit

Então você pode executar:

cat cmds.txt | remake -X -f Makefile

Deixo como um exercício como fazer algo mais elaborado, como um programa de escrita que usa um nome de dependência e executa o acima.

    
por 27.04.2015 / 01:52

Tags