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下的运行,比如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-compliance 是一个问题,您可以选择避免此建议。
如评论中所建议,Makefile
会更好,因此,如果您创建一个名为 Makefile
的文件,其内容如下:
all: test1 test2 test3
你可以简单地 运行:
make
并且所有三个程序都将被编译,只有在必要时,即如果您自上次编译后更改了源文件。或者,如果您想使用您向英特尔支付如此丰厚费用的所有这些内核,您可以并行使用它们:
make -j
例如在Linux中,将3个文件“test1.c”、“test2.c”和“test3.c”分别编译为“test1”、“test2” " 和 "test3",有没有办法使用通配符或管道通过一行 bash 指令来完成?
实际上并没有 "bash 指令" 这样的东西,即使你说 "bash 命令" ,那么 gcc
就不是真正的东西,因为它与 bash
没有内在联系,或者不是 bash
的一部分。是一个单独的binary/program,可以是任何shell下的运行,比如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-compliance 是一个问题,您可以选择避免此建议。
如评论中所建议,Makefile
会更好,因此,如果您创建一个名为 Makefile
的文件,其内容如下:
all: test1 test2 test3
你可以简单地 运行:
make
并且所有三个程序都将被编译,只有在必要时,即如果您自上次编译后更改了源文件。或者,如果您想使用您向英特尔支付如此丰厚费用的所有这些内核,您可以并行使用它们:
make -j