0

我有一个 Bash 脚本,它接受一个带有源代码的输入文件夹和一个输出目录作为参数。我希望能够编译源文件夹中的文件,然后将它们发送到输出文件夹。问题是xargs在参数末尾添加了读取的源文件,我希望在其中添加输出文件夹。如何控制xargs参数的位置?这就是我想要做的:find $source -name '*.c' | xargs gcc <files> $output

4

3 回答 3

2

这可以通过以下方式实现:

find $source -name '*.c' | xargs gcc -o $output

这指定了gcc在给它源文件列表之前的输出。

这个问题不能通过改变 xargs 参数的位置来解决,就像你这样做:

find $source -name '*.c' | xargs -I source gcc source -o $output

假设您从以下位置获取source/a.csource/b.c返回,将会运行的find内容是:

gcc source/a.c -o $output
gcc source/b.c -o $output

我不相信这是你所追求的结果。

于 2013-04-17T09:28:32.143 回答
0

此任务也可以仅使用 Bash 来解决:

#!/bin/sh

if [ $# -ne 2 ]; then
    echo "usage: $0 [srcdir] [bindir]"
    exit 1
fi

src_dir="${1%/}"
bin_dir="${2%/}"

for src in "$src_dir"/*.c; do
    bin="$(basename "${src%.c}")"
    gcc "$src" -o "$bin_dir/$bin"
done
于 2013-04-17T18:40:32.170 回答
0

使用 GNU 并行:

find $source -name '*.c' | parallel gcc {} -o $output/{.}

或者,如果您想要 {} 中的所有文件:

find $source -name '*.c' | parallel -Xj1 gcc {} -o $output

了解有关 GNU Parallel 的更多信息:https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

10秒安装:

wget pi.dk/3 -qO - | sh -x
于 2013-04-17T18:14:41.357 回答