例如,在Linux中,将3个文件"test1.c","test2.c"和"test3.c"分别编译为"test1","test2"和"test3",有没有办法使用通配符或管道通过一行bash指令来完成?
实际上并没有"bash 指令"这样的东西,即使你说"bash command">,那么gcc
也不是真正的东西,因为它与bash
没有内在关系,也不是的一部分。它是一个独立的二进制文件/程序,可以在任何外壳下运行,例如sh
、ksh
、ash
、dash
甚至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