Linux bash 中有没有一条指令可以编译多个文件?

Is there anyway to compile many files by a single instruction in Linux bash?

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

实际上并没有 "bash 指令" 这样的东西,即使你说 "bash 命令" ,那么 gcc 就不是真正的东西,因为它与 bash 没有内在联系,或者不是 bash 的一部分。是一个单独的binary/program,可以是任何shell下的运行,比如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-compliance 是一个问题,您可以选择避免此建议。


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

all: test1 test2 test3

你可以简单地 运行:

make

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

make -j