取得除一個之外的所有 .o 檔案的簡單方法

取得除一個之外的所有 .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"將所有空格更改為換行符(每行給我們一個文件名,這讓我們egrep很高興。
egrep -v folder/main.o從該列表中消除不需要的文件名。
$()將其餘文件名放在命令列上。由於$IFS預設為SPACE、TAB、 NEWLINE,所以我們不必須讓tr他們回到空間。

答案2

您應該使用 makefile,甚至更好的自動工具,但您可以執行以下操作:

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資料夾/*.o -> 列出資料夾資料夾中的所有.o檔案(每行一個)

  • grep -v main.o -> 從清單中排除 main.o

  • xargs -I{} g++ {} -o bin -> 執行 "g++ 檔案 -o bin

相關內容