在 Linux bash 中,有没有办法通过一条指令编译许多文件?



例如,在Linux中,将3个文件"test1.c","test2.c"和"test3.c"分别编译为"test1","test2"和"test3",有没有办法使用通配符或管道通过一行bash指令来完成?

实际上并没有"bash 指令"这样的东西,即使你说"bash command">,那么gcc也不是真正的东西,因为它与bash没有内在关系,也不是的一部分。它是一个独立的二进制文件/程序,可以在任何外壳下运行,例如shkshashdash甚至tcsh

假设你的意思是一行,你可以做到:

gcc prog1.c -o prog1 & gcc prog2.c -o prog2 & gcc -o prog3 prog3.c

你同样可以按照 William 的建议在一个循环中做到这一点:

for f in test?.c; do gcc "$f" -o "${f%.c}" &  done

恕我直言,最简单的是使用 GNU Parallel

parallel gcc {} -o {.} ::: test?.c

有些人会正确地说GNU Parallel不是POSIX的一部分,但是,公平地说,你没有在你的问题中提到POSIX。因此,如果 POSIX 合规性是一个问题,您可以选择避免此建议。


正如评论中所建议的,Makefile会更好,因此,如果您创建一个名为Makefile的文件,其中包含以下内容:

all: test1 test2 test3

您可以简单地运行:

make

并且所有三个程序都将被编译,仅在必要时,即自上次编译以来更改了源文件。或者,如果您想使用您向英特尔支付了如此丰厚的所有内核,您可以与以下人员并行使用:

make -j

最新更新