获取除一个之外的所有 .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 folder/*.o -> 列出文件夹文件夹中的所有 .o 文件(每行一个)

  • grep -v main.o -> 从列表中排除 main.o

  • xargs -I{} g++ {} -o bin -> 执行 "g++文件-o bin

相关内容