Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C GNU样式模式规则的可移植等价物_C_Makefile_Portability_Automake_Gnu Make - Fatal编程技术网

C GNU样式模式规则的可移植等价物

C GNU样式模式规则的可移植等价物,c,makefile,portability,automake,gnu-make,C,Makefile,Portability,Automake,Gnu Make,我遵循页面上的说明,试图在一个(目前)小型C项目中构建对单元测试的支持。虽然我用的是代替 我在步骤9中遇到了问题,这导致automake发出一条警告,指出使用了作为GNU make扩展的“%”样式的模式规则 具体的制定规则是: check_%.$(OBJEXT) : $(srcdir)/%.c $(COMPILE) -DCHECKING -c -o $@ $^ 我想知道是否有一种不依赖gnu make扩展的等效方法来指定此规则。Portable make规则只能使用不同的后缀,前缀应该

我遵循页面上的说明,试图在一个(目前)小型C项目中构建对单元测试的支持。虽然我用的是代替

我在步骤9中遇到了问题,这导致automake发出一条警告,指出使用了作为GNU make扩展的“%”样式的模式规则

具体的制定规则是:

check_%.$(OBJEXT) : $(srcdir)/%.c
    $(COMPILE) -DCHECKING -c -o $@ $^

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

Portable make规则只能使用不同的后缀,前缀应该相同

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

我宁愿尝试禁用警告,或者干脆忽略它。GNU make适用于所有相关的类Unix平台;没有实际理由花时间维护makefile的可移植性。GNU make也比大多数其他方言更聪明。

这是正确的,但是当主机OS提供一个盒子的时候,不需要安装额外的工具就好了。但是考虑一下你必须花时间来维护一个可移植的MaX文件。如果您只以GNU make为目标,您将更容易编写您的makefile,并获得更多的时间来改进您的应用程序和修复bug。故事不错,如果您只以GNU make为目标,您是否将所有makefile命名为GNUMakefile?要求每个人的“make”都是GNU make,并且不表示您希望通过使用GNUMakefile来破坏与标准make的兼容性,这是现在的标准做法,多亏了“不要浪费时间维护一个可移植的makefile”的态度。很幸运,我不能否决我自己的帖子,但为了我的辩护,我在近10年前写了它。OP明确要求一个不需要gnu make的解决方案,所以我的评论相当愚蠢。很好的建议。解决了这个问题。我最后用了一个_test前缀而不是_check。
SUFFIXES = _check.o 
check_libapdns_LDADD        = @CHECK_LIBS@ showdns_check.o
.c_check.o:
        $(COMPILE) -DCHECKING -c -o $@ $<