Como eu mesclo dois arquivos de cabeçalho C, de forma que remdequinas são removidas?

2

Supondo que eu tenha:

sdk.h:

#define foo 1
#define bar 1

app.h:

#define foo 0

Como posso gerar um merged.h que se parece com isso, dado que eu quero app.h para redefinir qualquer coisa já definida em sdk.h:

#define foo 0
#define bar 1

Uma abordagem pode ser "não faça isso, apenas deixe o pré-processador fazer isso por você". Eu tentei isso e não vai funcionar para a minha situação eu não acho. Estou realmente procurando uma abordagem usando um script de shell básico.

    
por Eliot 18.08.2017 / 15:04

1 resposta

1

Se a ordem do conteúdo nos arquivos de cabeçalho não for importante, você poderá fazer algo assim:

$ awk '/#define/{a[$2]=$3; next}1;END{for(i in a){print "#define",i,a[i]}}' sdk.h app.h 
#define foo 0
#define bar 1

Note que qualquer linha que não contenha #define será impressa primeiro.

    
por 18.08.2017 / 15:32