前缀@ - 在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
答案 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执行之前,“ - ”被丢弃。