Modificar nomes de arquivos no Makefile

3

Por razões que não são importantes aqui, eu tenho um código-fonte que eu processo automaticamente arquivo por arquivo e os arquivos de origem processados são renomeados de maneira sistemática. Por exemplo, eu começo com arquivos chamados

fun1.c fun2.c

e acabe com arquivos

fun1_a.c fun2_a.c

Eu quero que o Makefile seja adaptado automaticamente também. Uma versão básica do Makefile é

SRC=    fun1.c fun2.c

%.o: $.c
        $(CC) $(CFLAGS) -c $< -o $@

OBJ= $(SRC:.c=.o)

fun2.o: fun1.o

Como posso processar melhor o arquivo para que cada entrada na definição dos arquivos de origem e nas dependências seja alterada conforme necessário, mas as regras de padrão são deixadas intactas? Em outras palavras, o que eu preciso é:

SRC=    fun1_a.c fun2_a.c

%.o: $.c
        $(CC) $(CFLAGS) -c $< -o $@

OBJ= $(SRC:.c=.o)

fun2_a.o: fun1_a.o

Suponho que isso seja trivial, mas minhas habilidades de script, especialmente em sed e perl , são limitadas.

EDIT: Por favor note que, na prática, nem todos os arquivos serão chamados funx.c onde x é um inteiro, então estou procurando uma solução que funcione com qualquer nome de arquivo .

    
por user1362373 17.11.2015 / 16:26

1 resposta

0

Supondo que os nomes dos arquivos originais são estáticos, e somente o resultado da operação de renomeação é imprevisível. Ao renomear arquivos, gere um arquivo adicional que contenha o mapeamento dos nomes dos arquivos originais para os novos nomes, por exemplo:

fun1.c=fun1_a.c
fun2.c=fun2_a.c

Supondo que esse arquivo de mapeamento gerado seja chamado de rename.mk , é possível modificar o Makefile da seguinte maneira:

include rename.mk
SRC=    $(fun1.c) $(fun2.c)

%.o: $.c
        $(CC) $(CFLAGS) -c $< -o $@

OBJ= $(SRC:.c=.o)

$(fun2.c:.c=.o): $(fun1.c:.c=.o)

Os nomes dos arquivos se tornaram os nomes das variáveis e são usados para acessar os novos nomes por meio do mapeamento especificado em rename.mk .

    
por 16.12.2015 / 21:41