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
第 5 节在规则中编写配方包含有关这两件事的信息。特别是第 5.2 节和第 5.5 节。
5.2 配方回显
通常 make 在执行之前会打印配方的每一行。我们称其为回显,因为它看起来像是您自己键入的行。
当一行以“@”开头时,该行的回显将被抑制。在该行传递到 shell 之前,“@”将被丢弃。通常,您会将其用于唯一效果是打印某些内容的命令,例如用于指示 makefile 进度的 echo 命令:
和
5.5 食谱错误
每次 shell 调用返回后,make 都会查看其退出状态。如果 shell 成功完成(退出状态为零),则配方中的下一行将在新 shell 中执行;最后一行完成后,规则就完成了。
如果出现错误(退出状态非零),则 make 放弃当前规则,也许放弃所有规则。
有时某个配方行的失败并不表示存在问题。例如,您可以使用 mkdir 命令来确保目录存在。如果目录已经存在,mkdir 将报告错误,但您可能希望 make 继续执行。
要忽略配方行中的错误,请在该行文本的开头(在初始选项卡之后)写入“-”。在该行传递到 shell 执行之前,“-”将被丢弃。
嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿哈哈哈