Máscaras no Makefile

Definição

  • São símbolos que representam valores

Algumas máscaras

SímboloFunção
$<Representar a primeira dependência
$@Representar um determinado alvo
*.<extensão>Representar todos os arquivos com uma determinada extensão (apenas em comando)
%.<extensão>Representar todos os arquivos com uma determinada extensão (apenas em alvo ou dependência)

Exemplos

  • Exemplo 1

    SRC = ./src
    OBJ = ./obj
    BIN = ./bin
    MOD = ./mod
    CC = gfortran # Comando para chamar o compilador do Fortran
     
    $(BIN)/programa.x   $(SRC)/programa.f90  $(OBJ)/modulo_lib.o
          $(CC) $(OBJ)/modulo_lib.o $< -I $(MOD) -o $@
     
    $(OBJ)/%.o:    $(SRC)/%.f90
          $(CC) -c $< -J $(MOD) -o $@
     
    clean:
          rm $(OBJ)/*.o $(MOD)/*.mod $(BIN)/*.x
    • $< = representar a primeira dependência, ou seja, $(SRC)/programa.f90

    • $@ = representar o nome do alvo, nesse caso $(BIN)/programa.x, como o nome do alvo é igual à saída da compilação, logo é possível utilizar essa máscara

    • %.o = representar todos os arquivos com a extensão .o, ou seja, $(OBJ)/modulo.o

    • %.f90 = representar todos os arquivos com a extensão .f90, ou seja, $(SRC)/modulo.f90

  • Exemplo 2

    • Código com máscaras

      CC = gfortran
      DEP = teste.x arquivo.x
       
      all:    $(DEP)
       
      # A regra abaixo pode ser aplicada para todos os arquivos com a extensão .x
      %.x:    %.f90
            $(CC) $< -o $@
    • Código sem máscaras

      all:    teste.x arquivo.x
       
      teste.x:    teste.f90
            gfortran teste.f90 -o test.x
       
      arquivo.x:    arquivo.f90
            gfortran arquivo.f90 -o arquivo.x