1

互いに無関係で、それぞれが 1 つのファイルにしか含まれていない C++ プログラムがたくさんあります。ディレクトリ構造は次のようになります。

dir1
    program1.cpp
    program1.h
    program2.cpp
    program2.h
dir2
    program3.cpp
    program3.h
    program4.cpp
    program4.h
dir3
    program5.cpp
    program5.h
    program6.cpp
    program6.h
..

それらすべてをコンパイルし、実行可能ファイルに異なる名前を付けるシェルスクリプトを考え出そうとしています。find私はこれを次のように試してきました:

find . -type f -name *.cpp -exec g++ -llibname '{}' \;

これにより、すべてのファイルがコンパイルされますが、a.outファイルごとに生成されるため、最終的に実行可能ファイルは 1 つだけになります。ファイル拡張子を削除して、実行可能ファイル名として指定するにはどうすればよいですか? (例: がprogram1.cpp必要な場合g++ program1.cpp -o program1)

4

2 に答える 2

4

次のようなことができます。

find . -type f -name '*.cpp' -exec sh -c 'g++ {} -o $(basename {} .cpp)' \;

これにより、コマンドを起動したディレクトリにすべての実行可能ファイルが配置されます。それらをソースファイルと同じディレクトリに保持したい場合は、次のようにする必要があります。

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

.cpp(ファイル名のパターンを引用することを忘れないでください。そうしないと、現在のディレクトリにファイルがある場合、コマンドが壊れ始めます。)

于 2013-03-18T10:00:48.250 に答える
1

次のことも試すことができます。

find . -type f -name '*.cpp'| sed 's/.cpp$//' | xargs make
于 2013-03-18T10:39:28.563 に答える