【问题标题】:recipes in Makefiles prefixed with a dash [duplicate]Makefiles中的食谱以破折号为前缀[重复]
【发布时间】:2019-10-31 16:06:00
【问题描述】:

我看到在 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.:另外,括号是什么意思?例如。 -( … )

【问题讨论】:

    标签: bash makefile gnu-make


    【解决方案1】:

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

    【讨论】:

    • 不,您将-@ 混淆了
    • 哦不...是忽略错误的事情吗?
    • 是的,这就是减号的作用。
    • 哦,链接的副本已经说明了这一点……所以我只保留括号。
    • 在没有.ONESHELL 的情况下,括号实际上并没有添加任何有用的东西;无论如何,配方中的一行与配方中的每一行都是分开执行的。
    猜你喜欢
    • 2014-02-10
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    相关资源
    最近更新 更多