Da raiz da sua execução na árvore
find . -name \*cpp | while read FILE
do
sed -i '1i #include "rootpath/headerfile.h"' "$FILE"
done
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?
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.
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.