例如,在Linux中,要将3个文件"test1.c“、"test2.c”和"test3.c“分别编译为"test1”、"test2“和"test3",是否有办法使用通配符或管道通过一行bash指令来实现?
发布于 2022-02-22 13:40:40
没有真正的"bash指令“,即使您说"bash命令”,gcc也不是真正的“bash指令”,因为它与bash没有本质的关联,或者是bash的一部分。它是一个单独的二进制/程序,可以在任何shell下运行,比如sh、ksh、ash、dash甚至tcsh。
假设你指的是一行,你可以做到:
gcc prog1.c -o prog1 & gcc prog2.c -o prog2 & gcc -o prog3 prog3.c你也可以像威廉建议的那样,在循环中做到这一点:
for f in test?.c; do gcc "$f" -o "${f%.c}" & done然而,最简单的是使用GNU并行
parallel gcc {} -o {.} ::: test?.c有些人会正确地说,GNU并行并不是POSIX的一部分,但是,公平地说,您在问题中没有提到POSIX。因此,如果POSIX-遵从性是一个问题,您可以选择避免这一建议。
正如注释中所建议的那样,如果您创建一个名为Makefile的文件,其内容如下:
all: test1 test2 test3您可以简单地运行:
make所有三个程序都将被编译,只有在必要的情况下,即如果您自上次编译以来已经更改了源文件。或者,如果您想使用所有您向Intel支付的非常可观的核心,您可以与之并行地进行如下操作:
make -jhttps://stackoverflow.com/questions/71221277
复制相似问题