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的基本目的,因为它一直在抱怨缺少分隔符。
非常感谢
答案 0 :(得分:2)
您可以使用$(info ...)
代替$(warning ...)
。 info
不会添加文件和行号。
撇开 - 我通常会尝试将这些检查作为理智规则的一部分,并使一切都依赖于该规则而不是在顶层执行。它以这种方式为您提供更多灵活性。例如,如果您不想在构建清理时运行检查,则会变得简单,或者如果您想在检查失败时使构建失败,它也会变得简单。
编辑 (在旁边添加更多细节)
您可以添加目标,而不是在最高级别制作ifneq
:
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返回的bash语法(因此! grep
如果找到文本则返回false,从而导致语句的||
部分被评估。)。 .PHONY: sanity_check
告诉make运行规则,即使名为sanity_check
的文件已存在