大佬教程收集整理的这篇文章主要介绍了Makefile 默认规则模式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
只是尝试使用这个框架编写一个有条件的 Makefile:
TARGET = test
ifeq ($(FOO),y)
$(TARGET):
@echo This is test
$(TARGET)-a:
@echo This is test-a
$(TARGET)-b:
@echo This is test-b
else
$(info FOO is Disabled)
endif
当 FOO 条件为真时,基于 TARGET 变量的一组规则(由一个 $(TARGET) 和一组 $(TARGET)-子字符串组成)按预期工作:
$ make test
This is test
$ make test-a
This is test-a
当 FOO 条件为假时,我想为我的所有目标定义一个默认规则,只是为了在屏幕上报告 FOO 变量被禁用。我不知道这样做的正确方法。尝试了一些选项:
Option1,使用骨架示例,始终打印字符串“FOO is Disabled”,但会产生错误:
$ make test-a
FOO is Disabled
make: *** No rule to make target 'test-a'. Stop.
$ make test
FOO is Disabled
make: *** No rule to make target 'test'. Stop.
选项2,如果尝试以这种方式修改错误规则:
else
$(TARGET)-%:
$(info FOO is Disabled)
endif
然后所有 $(TARGET)-subString 目标都按预期工作:
$ make test-a
FOO is Disabled
make: 'test-a' is up to date.
$ make test-b
FOO is Disabled
make: 'test-b' is up to date.
但是这个规则在制作 $(TARGET) 时失败了:
$ make test
make: *** No rule to make target 'test'. Stop.
选项 3,如果尝试删除选项 2 中定义的错误规则上的连字符:
else
$(TARGET)%:
$(info FOO is Disabled)
endif
然后使 $(TARGET) 执行编译 test.o 目标文件的默认规则:
$ make test
FOO is Disabled
cc test.o -o test
cc: error: test.o: No such file or directory
cc: Fatal error: no input files
compilation terminated.
make: *** [<builTin>: test] Error 1
我变得有点疯狂尝试满足这个默认规则。请对此提供一些帮助将非常有用。恩克斯!
有几种方法可以解决这个问题,但最简单的可能只是添加另一个规则:
else
$(TARGET):
@echo FOO is disabled
$(TARGET)%:
@echo FOO is disabled
endif
(我将 $(info ...
改为 @echo ...
因为后者只会在 Make 执行规则时运行,而前者会在条件定义这些规则时运行,即使目标是其他东西。)
编辑:是的,可以只用一个规则来解决这个问题,方法不止一种,但没有完美的方法。
这是一种方法:
TARGET = tes
...
else
$(TARGET)%:
@echo FOO is disabled
endif
请注意,test
的最后一个字符已被删除。好消息是此规则将适用于 test
、test-a
和 test-b
;坏消息是它也适用于 tesw
。
正如@madScientist 所说,当您只有一个 Makefile 时,.DEFAULT 规则可以解决这个问题。所以这将是最终的 Makefile:
TARGET = test
ifeq ($(FOO),y)
$(TARGET):
@echo This is test
$(TARGET)-a:
@echo This is test-a
$(TARGET)-b:
@echo This is test-b
endif
.DEFAULT:
@echo This is the default rule
非常感谢您的帮助!
以上是大佬教程为你收集整理的Makefile 默认规则模式全部内容,希望文章能够帮你解决Makefile 默认规则模式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。