0

すべてのディレクトリ内のすべての C ファイルをコンパイルするための小さなコマンドを作成しました。

find $1 -type f -name '*.c' -exec sh -c 'gcc  {} -o $(dirname {})/$(basename {} .c)' \;

すべてをコンパイルしますが、コンパイル中の各ファイルのステータスを表示し、それぞれが終了したときに表示するようにしたいのですが、アイデアがあれば本当にアウトです。

誰かが助けてくれるなら、私はそれが大好きです!

4

2 に答える 2

1

これは学術的な問題である可能性があり{}ますが、引数 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' {} \;
于 2013-05-13T11:41:32.427 に答える
1

実行echo $?gcc、その戻りステータスが表示されます。ファイルがコンパイルされた場合は0、そうでない場合は になる1と思います。しかし、さまざまなエラーに対してさまざまな戻り値がある可能性があります。これについてはわかりません。

于 2013-05-13T09:54:31.637 に答える