15

Unixでのアプリケーションの使用例は次のxargsようになります。

ls | xargs echo

これは(私が持っていて、作業ディレクトリにあるsomeFileとしましょう)と同じです:someDir/

echo someFile someDir

そのxargsため、入力を取得して、次のコマンドの最後(ここではエコーの最後)に配置します。

しかし、次のコマンドの途中xargsのどこかに入力を配置したい場合があります。

例えば:

find . -type f -name "*.cpp" -print | xargs g++ -o outputFile

したがって、現在のディレクトリファイルa.cppb.cppc.cppがある場合、出力は次のコマンドと同じになります。

g++ -o outputFile a.cpp b.cpp c.cpp

しかし、私はこのようなものが欲しいです:

g++ a.cpp b.cpp c.cpp -o outputFile

それを行う方法はありますか?

PS:場合によっては、それが必要になります。例:

i586-mingw32msvc-g++ -o outputFile `pkg-config --cflags --libs gtkmm-2.4` a.cpp b.cpp c.cpp

動作しませんが、これは正常に動作します:

i586-mingw32msvc-g++ a.cpp b.cpp c.cpp -o outputFile `pkg-config --cflags --libs gtkmm-2.4`
4

4 に答える 4

6

お使いのバージョンの xargs にこの機能が含まれていない場合は-I、別の方法として、実行するコマンドを含む小さなシェル スクリプトを作成します。

#!/bin/sh
exec i586-mingw32msvc-g++ "$@" -o outputFile...

次に、xargs を使用してそれを実行します。

find . -type f -name "*.cpp" -print | xargs my_gcc_script
于 2009-09-05T12:27:28.600 に答える
1

GNU Parallel http://www.gnu.org/software/parallel/も解決策になります。

find . -type f -name "*.cpp" -print | parallel -Xj1 g++ {} -o outputFile

*.cpp は 1 行に収まる必要があります (~128 KB)。

于 2010-06-10T19:10:36.857 に答える
1

これは必要ありませんxargs。使用するだけです:

g++ `find . -type f -name '*.cpp'` -o outputFile
于 2009-09-05T17:05:45.143 に答える