GNU make中%-style模式规则的便携式等效物

5
我将遵循使用Autotools进行检查页面上的说明,尝试在当前较小的C项目中构建单元测试支持。尽管我使用的是Cgreen而不是Check
我在第9步遇到了问题,这导致automake发出警告,指出“%”样式模式规则是GNU make扩展的使用。
特定的make规则是:
check_%.$(OBJEXT) : $(srcdir)/%.c
    $(COMPILE) -DCHECKING -c -o $@ $^

我想知道是否有一种等效的方法来指定此规则,而不依赖于GNU make扩展。

2个回答

7

可移植的make规则只能使用不同的后缀,前缀应该是相同的。

.c.o:
        $(COMPILE) -DCHECKING -c -o $@ $<

后缀并不一定以点号开头。(在这种情况下,您需要告诉Automake您的后缀是什么,因为它不能猜测。)因此,例如,如果您将check_showdns.o重命名为showdns_check.o,则可以得到如下内容:
SUFFIXES = _check.o 
check_libapdns_LDADD        = @CHECK_LIBS@ showdns_check.o
.c_check.o:
        $(COMPILE) -DCHECKING -c -o $@ $<

很好的建议。问题已经解决了。我最终使用了一个_test前缀而不是_check。 - Wes

-3

我宁愿尝试禁用警告或忽略它。GNU make适用于所有相关的类Unix平台;没有实际理由花时间维护makefile的可移植性。GNU make在功能上也优于大多数其他make方言。


这是正确的,但如果主机操作系统已经提供了一个工具,不需要再安装额外的工具会更好。 - Wes
但要考虑你必须花费时间来维护可移植的 makefile。如果你只针对 GNU make,你将更容易编写 makefiles,并有更多时间改进应用程序和修复错误。 - JesperE
1
很好的故事,如果你只针对GNU Make,你是否像应该做的那样将所有Makefile命名为GNUMakefile?现在,通过使用GNUMakefile来要求每个人的'make'都是GNU Make,并且不表明您希望通过使用GNUMakefile来破坏与标准make的兼容性,这已成为标准做法,感谢“不要浪费时间维护可移植的makefile”的态度。 - MkV
很遗憾,我不能对自己的帖子进行踩,但为了辩护,我写这篇文章已经快10年了。原帖明确要求不使用GNU make的解决方案,所以我的评论有点傻。 - JesperE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接