さまざまな数のブランチを持つサブディレクトリツリーがあり、ほとんどのブランチには.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.