【问题标题】:What does prefix @- mean in makefile?在makefile中前缀@-是什么意思?
【发布时间】:2015-02-03 17:59:05
【问题描述】:

makefile 中的前缀@- 是什么意思?与使用@ 而不使用- 有什么区别?比如下面这种情况:

ifndef NO_CBLAS
    @echo Generating cblas.h in $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)
    @sed 's/common/openblas_config/g' cblas.h > $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/cblas.h
endif

ifndef NO_LAPACKE
    @echo Copying LAPACKE header files to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke.h
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_config.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_config.h
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_mangling_with_flags.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_mangling.h
    @-install -pDm644 $(NETLIB_LAPACK_DIR)/lapacke/include/lapacke_utils.h $(DESTDIR)$(OPENBLAS_INCLUDE_DIR)/lapacke_utils.h
endif
ifndef NO_STATIC
    @echo Copying the static library to $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
    @install -pm644 $(LIBNAME) $(DESTDIR)$(OPENBLAS_LIBRARY_DIR)
    @cd $(DESTDIR)$(OPENBLAS_LIBRARY_DIR) ; \
    ln -fs $(LIBNAME) $(LIBPREFIX).$(LIBSUFFIX)
endif

【问题讨论】:

  • GNU make Manual 的第 5 节 Writing Recipes in Rules 包含有关这两个内容的信息。特别是第 5.2 和 5.5 节。

标签: makefile


【解决方案1】:

GNU make 手册的第 5 节 Writing Recipes in Rules 包含有关这两个内容的信息。特别是第 5.2 和 5.5 节。

5.2 配方回响

通常 make 在执行之前打印配方的每一行。我们将此称为回显,因为它使您看起来像是在自己键入行。

当一行以“@”开头时,该行的回显被抑制。在将行传递给 shell 之前,“@”被丢弃。通常,您会将其用于仅用于打印某些内容的命令,例如用于指示 makefile 进度的 echo 命令:

5.5 配方中的错误

在每个 shell 调用返回后,make 查看它的退出状态。如果 shell 成功完成(退出状态为零),则配方中的下一行将在新的 shell 中执行;最后一行结束后,规则结束。

如果出现错误(退出状态为非零),make 放弃当前规则,也许放弃所有规则。

有时某个配方行的失败并不表示存在问题。例如,您可以使用 mkdir 命令来确保目录存在。如果目录已经存在,mkdir 会报错,但你可能希望 make 继续运行。

要忽略配方行中的错误,请在行文本的开头(在初始制表符之后)写一个“-”。在该行被传递到 shell 执行之前,'-' 被丢弃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多