我编写了一个小命令来编译每个目录中的每个 C 文件,我有:
find $1 -type f -name '*.c' -exec sh -c 'gcc {} -o $(dirname {})/$(basename {} .c)' \;
它会编译所有内容,但我希望它显示正在编译的每个文件的状态,并显示每个文件何时完成,但我真的很想出主意。
如果有人能帮忙,我会喜欢的!
我编写了一个小命令来编译每个目录中的每个 C 文件,我有:
find $1 -type f -name '*.c' -exec sh -c 'gcc {} -o $(dirname {})/$(basename {} .c)' \;
它会编译所有内容,但我希望它显示正在编译的每个文件的状态,并显示每个文件何时完成,但我真的很想出主意。
如果有人能帮忙,我会喜欢的!
您可以echo $?
在运行后gcc
显示它的返回状态。如果一个文件编译它会是0
,如果不是它会是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' {} \;