すべてのディレクトリ内のすべての C ファイルをコンパイルするための小さなコマンドを作成しました。
find $1 -type f -name '*.c' -exec sh -c 'gcc {} -o $(dirname {})/$(basename {} .c)' \;
すべてをコンパイルしますが、コンパイル中の各ファイルのステータスを表示し、それぞれが終了したときに表示するようにしたいのですが、アイデアがあれば本当にアウトです。
誰かが助けてくれるなら、私はそれが大好きです!
すべてのディレクトリ内のすべての C ファイルをコンパイルするための小さなコマンドを作成しました。
find $1 -type f -name '*.c' -exec sh -c 'gcc {} -o $(dirname {})/$(basename {} .c)' \;
すべてをコンパイルしますが、コンパイル中の各ファイルのステータスを表示し、それぞれが終了したときに表示するようにしたいのですが、アイデアがあれば本当にアウトです。
誰かが助けてくれるなら、私はそれが大好きです!
これは学術的な問題である可能性があり{}
ますが、引数 to で複数回使用することfind
は移植性がありません。同様に{}
、引数内の唯一の文字列ではない場合にファイル名に展開されることを期待することは、移植性がありません。(つまり、引数全体が正確に でなければなりません{}
)。また、gcc
ではなく明示的に使用することmake
は、おそらく間違ったアプローチです。つまり、正常にコンパイルされた各パスを単純にエコーすることができます。
find $1 -type f -name '*.c' -exec sh -c 'gcc $0 -o $(dirname $0)/$(basename $0.c) &&
echo $0' {} \;
また、bash で簡略化できる場合:
find $1 -type f -name '*.c' -exec bash -c 'gcc $0 -o ${0%.c}.o && echo $0' {} \;
実行echo $?
後gcc
、その戻りステータスが表示されます。ファイルがコンパイルされた場合は0
、そうでない場合は になる1
と思います。しかし、さまざまなエラーに対してさまざまな戻り値がある可能性があります。これについてはわかりません。