我正在尝试链接来自另一个文件夹的所有 *.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 folder/*.o -> 列出文件夹文件夹中的所有 .o 文件(每行一个)
grep -v main.o -> 从列表中排除 main.o
xargs -I{} g++ {} -o bin -> 执行 "g++文件-o bin“