Script para inserir linha nos arquivos em sub-dirs

1

Eu tenho uma árvore subdiretório com um número variável de ramificações e a maioria delas os ramos contêm arquivos .cpp (muitos deles). Eu tenho um arquivo de cabeçalho na raiz da árvore que eu quero ter como um

#include "<constructed-relative-path-to-root>/headerfile.h"

como a primeira linha de cada .cpp.

uma alternativa para constructed-relative-path-to-root seria o caminho hard-coded, que teria que ser ajustado sempre que o projeto fosse realocado)

uma segunda alternativa seria copiar o conteúdo do arquivo de cabeçalho no início de cada arquivo .cpp

Não tenho ideia de como escrever um roteiro desse tipo. Alguém pode ajudar por favor?

    
por slashmais 28.11.2012 / 12:34

3 respostas

1

Da raiz da sua execução na árvore

find . -name \*cpp | while read FILE
do
    sed -i '1i #include "rootpath/headerfile.h"' "$FILE"
done
    
por 28.11.2012 / 13:56
1

Consegui isso na lista de emails :

base=$(pwd)
find . -type f -iname '*.cpp' | while read f ; do
   curr=$(dirname $f)
   relpath=$(python -c "import os.path; print os.path.relpath('$base',
'$curr')")
   sed -i -e '1i#include "'$relpath/headerfile.h'"' "$f"
done

Copie o código acima em um arquivo, torne-o executável e execute a partir da linha de comando.

    
por 28.11.2012 / 13:55
1

Se o seu objetivo é incluir um arquivo de cabeçalho no início de cada arquivo de origem criado e você estiver usando o gcc, não será necessário alterar seus arquivos; você pode simplesmente adicionar:

-include headerfile.h

para a linha de comando do gcc. Na página do manual:

   -include file
       Process file as if "#include "file"" appeared as the first line of
       the primary source file.  However, the first directory searched for
       file is the preprocessor's working directory instead of the
       directory containing the main source file.  If not found there, it
       is searched for in the remainder of the "#include "..."" search
       chain as normal.
    
por 29.11.2012 / 07:50