makefile 里的 sed 命令,里面的$*是 makefile 的一个自动变量吗

查看 46|回复 5
作者:amiwrong123   

makefile 正在学习中,看到一个规则里面用了 sed 命令,sed 命令里用了$*,感觉只用正则表达式来解释$解释为行尾解释不通。
ldd@CD:~/hello$ gcc -M hello.c
hello.o: hello.c /usr/include/stdc-predef.h /usr/include/stdio.h \
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h \
/usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
/usr/include/x86_64-linux-gnu/bits/wordsize.h \
/usr/include/x86_64-linux-gnu/bits/long-double.h \
/usr/include/x86_64-linux-gnu/gnu/stubs.h \
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
/usr/lib/gcc/x86_64-linux-gnu/9/include/stddef.h \
/usr/lib/gcc/x86_64-linux-gnu/9/include/stdarg.h \
/usr/include/x86_64-linux-gnu/bits/types.h \
/usr/include/x86_64-linux-gnu/bits/timesize.h \
/usr/include/x86_64-linux-gnu/bits/typesizes.h \
/usr/include/x86_64-linux-gnu/bits/time64.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__mbstate_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__fpos64_t.h \
/usr/include/x86_64-linux-gnu/bits/types/__FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/FILE.h \
/usr/include/x86_64-linux-gnu/bits/types/struct_FILE.h \
/usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
另外随便写了一个 hellowoald ,看了 gcc -M 的输出如上。
另外,为啥一定要用这个 d 文件,感觉有点没理解它的妙处?
PS:脚本方面比较弱,正在学习中,大佬们帮忙解答下。
ho121   
应该是 bash 的内置变量 https://www.baeldung.com/linux/shell-special-dollar-sign-variables
amiwrong123
OP
  
@ho121
意思$*是$* 代表所有命令行参数呗?
但是放在这里是啥意思啊,是给 sed 的命令行参数吗?还是我给 make 的命令行参数啊?
ho121   
@amiwrong123 不妨贴一下那条 sed 命令
amiwrong123
OP
  
@ho121
%.d: %.c
@set -e; rm -f $@; \
$(CC) -M $(CPPFLAGS) $ $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g'  $@; \
rm -f $@.$$$$
amiwrong123
OP
  
@ho121
规则下面的命令的缩进没了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部