0

我编写了一个小命令来编译每个目录中的每个 C 文件,我有:

find $1 -type f -name '*.c' -exec sh -c 'gcc  {} -o $(dirname {})/$(basename {} .c)' \;

它会编译所有内容,但我希望它显示正在编译的每个文件的状态,并显示每个文件何时完成,但我真的很想出主意。

如果有人能帮忙,我会喜欢的!

4

2 回答 2

1

您可以echo $?在运行后gcc显示它的返回状态。如果一个文件编译它会是0,如果不是它会是1我想。但是不同的错误可能会有不同的返回值,我不确定。

于 2013-05-13T09:54:31.637 回答
1

这可能是一个学术问题,但{}在论点中多次使用find是不可移植的。同样,当文件名不是参数中的唯一字符串时,期望{}扩展为文件名是不可移植的。(也就是说,整个参数必须完全是{})。此外,gcc显式使用而不是make可能是错误的方法。也就是说,您可以简单地回显每个成功编译的路径:

find $1 -type f -name '*.c' -exec sh -c 'gcc $0 -o $(dirname $0)/$(basename $0.c) &&
    echo $0' {} \;

另外,如果您可以使用 bash 进行简化:

find $1 -type f -name '*.c' -exec bash -c 'gcc $0 -o ${0%.c}.o && echo $0' {} \;
于 2013-05-13T11:41:32.427 回答