如果我有一个makefile
include foo
foo: Makefile
@echo 'bar::' > foo
@echo "\t@echo 'bar'" >> foo
bar::
@echo 'baz'
然后当我运行make bar
时,我得到了
Makefile:1: foo: No such file or directory
bar
baz
我想压制这个警告。如果我有一个makefile
-include foo
foo: Makefile
@echo 'bar::' > foo
@echo "\t@echo 'bar'" >> foo
bar::
@echo 'baz'
然后我按预期得到了
bar
baz
但是,如果我有一个makefile
-include foo
bar::
@echo 'baz'
我运行make bar
,然后我
baz
虽然我想要得到像
这样的东西Makefile:1: foo: No such file or directory
make: *** No rule to make target 'foo'. Stop.
或至少
make: *** No rule to make target 'foo'. Stop.
如何在不抑制错误的情况下抑制警告,以便在无法创建文件/目标不存在但在成功创建时没有喷射时出现故障?
答案 0 :(得分:1)
我发现了一个非常棘手的解决方案,其中涉及手动发出错误消息:
-include foo
ifeq (,$(filter-out foo,$(MAKECMDGOALS)))
ifeq (,$(wildcard foo))
$(shell $(MAKE) foo)
ifeq (,$(wildcard foo))
$(error No rule to make target 'foo')
endif
endif
endif
foo: Makefile
@echo 'bar::' > foo
@echo "\t@echo 'bar'" >> foo
bar::
@echo 'baz'
也许一个稍微有点hacky的解决方案是:
ifeq (,$(filter-out foo,$(MAKECMDGOALS)))
ifeq (,$(wildcard foo))
$(shell $(MAKE) foo)
endif
include foo
else
-include foo
endif
foo: Makefile
@echo 'bar::' > foo
@echo "\t@echo 'bar'" >> foo
bar::
@echo 'baz'