Makefile中以短划线开头的食谱

时间:2019-06-18 04:41:35

标签: bash makefile gnu-make

我看到在Makefiles的某些配方中,命令的前缀是“-”。例如:

食谱A(“-if”中的“-”)

-if test "X$(topdir)" != "X$(BUILD_DIR)" ; then \
            $(RM) parser-built y.tab.c y.tab.h ; \
        fi

食谱B

( cd $(DOCDIR) && $(MAKE) $(MFLAGS) $@ )
( cd builtins && $(MAKE) $(MFLAGS) $@ )
-( cd $(SDIR) && $(MAKE) $(MFLAGS) $@ )
-for libdir in ${LIB_SUBDIRS}; do \
    (cd $$libdir && test -f Makefile && $(MAKE) $(MFLAGS) $@) ;\
done
-( cd $(PO_DIR) ; $(MAKE) $(MFLAGS) DESTDIR=$(DESTDIR) $@ )
$(RM) $(CREATED_SUPPORT)

食谱C

-size $(Program)

曾经试图了解它们是什么,但是在bash shell和GNU make手册中都找不到。有人知道他们的意思吗?是Bash或Make的功能吗?

P.S .:另外,方括号是什么意思?例如。 -(…)

1 个答案:

答案 0 :(得分:1)

括号是shell的功能,可在子shell中执行命令。这使您能够临时修改环境变量或在后台运行多个命令。 在这里,它用于临时(通过cd)更改工作目录,而不影响后续命令。在这种情况下,也可以通过将-C传递给make命令来实现。从make调用make称为“递归make”,并且有些问题(Google“认为递归make有害”)。