什么是前缀@ - 在makefile中是什么意思?

时间:2015-02-03 17:59:05

标签: makefile

前缀@ - 在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

1 个答案:

答案 0 :(得分:6)

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

  

5.2配方回应

     

通常在执行之前打印配方的每一行。我们称之为回声,因为它给出了您自己键入行的外观。

     

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

  

配方中的5.5错误

     

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

     

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

     

有时某条食谱线的失败并不表示存在问题。例如,您可以使用mkdir命令确保存在目录。如果目录已经存在,mkdir将报告错误,但您可能希望make继续,无论如何。

     

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