Testing Gnu Makefile,编译应该失败
我有一组示例,我想确保它们无法编译。使用*GNU Makefile实现这一点的最佳方法是什么 正如你所看到的,我在这里有几个困难:Testing Gnu Makefile,编译应该失败,testing,shell,makefile,gnu-make,Testing,Shell,Makefile,Gnu Make,我有一组示例,我想确保它们无法编译。使用*GNU Makefile实现这一点的最佳方法是什么 正如你所看到的,我在这里有几个困难: 访问变量cpp:$cpp,\$cpp和$$cpp的shell都不起作用 即使是我的ifmake也会在第一次g++编译失败后停止。但这正是我想要的。我希望g++编译失败被认为是正确的行为 在makefile中使用Shell for循环不是最好的主意。有更好的办法吗?我想不出一个,因为我预计编译会失败,所以我没有一个正确的目标,对吗 高级和可选: 如果我能设法让上
- 访问变量
:cpp
,$cpp
和\$cpp
的shell都不起作用$$cpp
- 即使是我的
make也会在第一次g++编译失败后停止。但这正是我想要的。我希望g++编译失败被认为是正确的行为if
- 在makefile中使用Shell for循环不是最好的主意。有更好的办法吗?我想不出一个,因为我预计编译会失败,所以我没有一个正确的目标,对吗
- 如果我能设法让上面的失败检查起作用,我可以尝试第二次编译,这次使用一个额外的
,它从我的示例中删除了有问题的行,然后代码应该编译。有什么想法吗-DEXCLUDE\u fail
- 或者应该为此编写Python脚本…?;-)李>
NOCOMPILE_CPP := $(wildcard nocompile/ *.cpp)
NOCOMPILE_XFAILS := $(addsuffix .xfail,$(basename $(NOCOMPILE_CPP)))
%.xfail: %.cpp
if $(CXX) $(CXXFLAGS) -o $@ $< ; then exit 1 ; else echo OK ; fi
$(CXX) $(CXXFLAGS) -DEXCLUDE_FAILCODE -o $@ $<
test_nocompile: $(NOCOMPILE_XFAILS)
NOCOMPILE\u CPP:=$(通配符NOCOMPILE/*.CPP)
NOCOMPILE\u XFAILS:=$(addsuffix.xfail,$(basename$(NOCOMPILE\u CPP)))
%.xfail:%.cpp
如果$(CXX)$(CXXFLAGS)-o$@$<;然后退出1;否则回声正常;fi
$(CXX)$(CXXFLAGS)-DEXCLUDE\u故障代码-o$@$<
测试文件:$(非文件文件文件)
这是优雅的吗?然后我只需要找出-DEXCLUDE\u FAILCODE
如何使失败的测试工作。。。。不平凡,但可行。我认为这可以做到,对吗
中的条件。现在,当文件未编译时,它将退出,并且您需要相反的结果
$(CXX)
,并返回一个正确的错误代码(如果没有编译,则返回0)。然后,您可以使用此脚本设置正常目标。我对GNU制造的细节不是很在行,可能是内置的东西1.让我们先让它工作起来:)
2.就我个人而言,我不使用python,因此这里没有必要=:PAhhh!是的,我以前纠正错了。当然,这是假设。Prrrrr。。。我想用“高级选项”我可以让目标检查再次工作。。。等等,我会编辑这个问题…@towi:但是对于
-DEXCLUDE\u FAIL
这个问题很容易在脚本中完成。首先检查它是否未编译,如果未编译则退出。然后用define检查编译。脚本的返回码应该是这个命令的返回码,这就是您需要的。@towi:为什么不$(NOCOMPILE\u CPP:.CPP=.xfail)
?你也可以考虑<代码>!(CXX),它将否定结果,并在需要时自动退出→ 不需要if.1)$(:.x=.y)
也应该可以工作,对吧。2) 我不确定是否代码>在Makefiles中的工作方式与在shell中的工作方式相同。我会尝试一下。@towi:因为这些操作是在shell中执行的,所以它们确实是:)
NOCOMPILE_CPP := $(wildcard nocompile/ *.cpp)
NOCOMPILE_XFAILS := $(addsuffix .xfail,$(basename $(NOCOMPILE_CPP)))
%.xfail: %.cpp
if $(CXX) $(CXXFLAGS) -o $@ $< ; then exit 1 ; else echo OK ; fi
$(CXX) $(CXXFLAGS) -DEXCLUDE_FAILCODE -o $@ $<
test_nocompile: $(NOCOMPILE_XFAILS)