サブディレクトリのファイルに行を挿入するスクリプト

サブディレクトリのファイルに行を挿入するスクリプト

さまざまな数のブランチを持つサブディレクトリツリーがあり、ほとんどのブランチには.cppファイル(多くのファイル)が含まれています。ツリールートに私が欲しいヘッダファイルがあります。

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

すべての.cppの最初の行に。

別のオプションconstructed-relative-path-to-rootはパスをハードコーディングすることです。このパスは、プロジェクトが再配置されるたびに調整する必要があります。

2番目のオプションは、ヘッダーファイルの内容を各.cppファイルの先頭にコピーすることです。

このようなスクリプトを書く方法がわかりません。誰でも助けることができますか?

答え1

木の根から走る

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

答え2

私はこれを捕まえたクラッグ- メーリングリスト:

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

上記のコードをファイルにコピーして実行可能にしたら、コマンドラインから実行してください。

答え3

ビルドするすべてのソースファイルの先頭にヘッダファイルを含めることが目標であり、gccを使用している場合は、ファイルをまったく変更する必要はありません。

-include headerfile.h

gccコマンドラインで。マニュアルページから:

   -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.

関連情報