DEPRECATED_CHECK := $(shell grep "test454" tex/*.tex)
ifneq ($(DEPRECATED_CHECK), )
$(warning \test454 is deprecated. Use \test2 instead)
endif
当我运行这个时,我得到:
../common/Makefile.include:133: \test454 is deprecated. Use \test2 instead
没关系,但我很想只有:
\test454 is deprecated. Use \test2 instead
这可能吗?某种awk功能?我想我需要一些东西:
@echo \text454 is deprecated ...
但我不知道如何让它与我的 MWE 的基本目的一起工作,因为它一直在抱怨缺少分隔符。
非常感谢
您可以使用$(info ...)
代替$(warning ...)
. info
不预先添加文件和行号。
顺便说一句——我通常会尝试将这些检查作为健全规则的一部分,并使一切都依赖于该规则,而不是在顶层进行。它以这种方式为您提供了更大的灵活性。例如,如果您不想在构建 clean 时运行检查,则它变得简单,或者如果您希望在检查失败时使构建失败,则它也变得简单。
编辑 (在旁边添加更多细节)
ifneq
您可以添加一个目标,而不是在 make 的顶层执行:
sanity_check:
@ ! grep -q "test454" tex/*.txt || echo "test454 is depricated"
.PHONY: sanity check
将主要目标的依赖项添加到完整性检查中:
all maintarg1 maintarg2: sanity_check
这样,健全性检查将在您的任何主要目标之前运行,并将根据需要输出。在我看来,这是一种更简洁的测试方式。这样,测试仅在您构建任何目标时运行,并且不会运行,例如您正在制作clean
,或者如果您的 makefile 包含在父 makefile 中,或者在一堆其他可能的极端情况下将来弹出。
只是对配方语法的快速说明:这@
是一个 make 指令,它告诉 make 在运行时不要回显命令。!
用于反转 grep 返回的is bash 语法(因此,! grep
如果找到文本,则返回 false,从而导致||
对语句的一部分进行评估。)。该.PHONY: sanity_check
告诉make运行规则,即使一个名为sanity_check
中已经存在
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句