我正在嘗試連結另一個資料夾中的所有 *.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」