1つを除くすべての.oファイルを取得する簡単な方法

1つを除くすべての.oファイルを取得する簡単な方法

私は別のフォルダーからすべての *.o ファイルをリンクしようとしており、Makefile で次のようなことを実行したいと考えています。

g++ *.o (folder/*.o and not folder/main.o) -o bin

ここで何らかの単純な正規表現を使用する方法はありますか?

答え1

を試してください。g++ *.o $( echo folder/*.o |tr ' ' "\n" | egrep -v folder/main.o )ただし、いずれのfolder/*.o名前にもスペースが含まれていないと仮定します。

仕組みは次のとおりです:

echo folder/*.oスペースで区切られたファイル名のリストとディレクトリを生成します。
tr ' ' "\n"すべてのスペースを改行に変更します (1 行に 1 つのファイル名が表示されるので、便利です) egrep
egrep -v folder/main.oこのリストから不要なファイル名を削除します。
$()残りのファイル名をコマンド ラインに入力します。$IFSデフォルトでは SPACE、TAB、NEWLINE になっているため、スペースに戻す必要はありませんtr

答え2

makefile を使用するか、またはさらに良い方法として autotools を使用することをお勧めしますが、次のようにすることもできます。

ls folder/ | grep "*.o" | grep -v "main.o" | while read -r file; do g++ $file -o bin; done

いずれにせよ、この質問は bash 関連のスタック サイトで回答したほうがよいでしょう。

答え3

これは動作するはずです:

ls -1 folder/*.o | grep -v main.o | xargs -I{} g++ {} -o bin

説明:

  • ls -1 folder/*.o -> フォルダー folder 内のすべての .o ファイルを一覧表示します (1 行に 1 つずつ)

  • grep -v main.o -> リストから main.o を除外する

  • xargs -I{} g++ {} -o bin -> "を実行g++ ファイル -o bin

関連情報