1
我有一个例子集合,我想确保它们编译失败。使用* GNU Makefile的最佳方法是什么?Gnu Makefile,编译应该失败
test_nocompile: $(NOCOMPILE_CPP)
for cpp in $(NOCOMPILE_CPP) ; do \
echo === $$cpp === ; \
if $(CXX) $(CXXFLAGS) -c -o fail.o $$cpp ; then echo ok ; else exit 1; fi ; \
done
正如你所看到的,我有几个困难,在这里:
- 访问壳变量
cpp
:$cpp
,\$cpp
和$$cpp
都不起作用。 - 即使使用我的
if
,在第一次g ++编译失败后make也会停止。但那正是我想要的。我不想g ++ - 编译被认为是正确的行为。 - Makefiles中的Shell for for循环不是最好的主意。有没有更好的办法?我想不出来,因为我预计编译失败,我没有一个正确的目标,对吧?
高级可选:
- 如果我能管理有故障检查以上的工作,我可以尝试编译第二遍,这一次额外的
-DEXCLUDE_FAIL
,其取出我的例子中的违规行,然后代码应该编译。任何想法? - 或者应该为此写一个Python脚本...? ;-)
编辑:
我想我的“高级可选”给了我一个非常好的主意,现在。我可以再次使用依赖检查。这里只是一个粗略的草图:
NOCOMPILE_CPP := $(wildcard nocompile/ *.cpp)
NOCOMPILE_XFAILS := $(addsuffix .xfail,$(basename $(NOCOMPILE_CPP)))
%.xfail: %.cpp
if $(CXX) $(CXXFLAGS) -o [email protected] $< ; then exit 1 ; else echo OK ; fi
$(CXX) $(CXXFLAGS) -DEXCLUDE_FAILCODE -o [email protected] $<
test_nocompile: $(NOCOMPILE_XFAILS)
这是优雅吗?那么我只需要研究-DEXCLUDE_FAILCODE
如何使失败的测试工作....非平凡,但可行。我认为这可以做到,对吧?
唉唉!是的,我之前纠错过。当然它的if。 Prrrrr ... *我认为用“高级选项”我可以有再次工作的目标检查* ...等等,我将编辑问题... – towi
@towi:但至于'-DEXCLUDE_FAIL '这很容易在剧本中完成。首先检查它是否不编译,如果是的话退出。然后用define检查编译。脚本的返回码应该是这个命令的返回码,这就是你需要的。 – 2011-03-15 08:56:42
@towi:为什么不是'$(NOCOMPILE_CPP:.cpp = .xfail)'?你也可以考虑'! $(CXX)',它将否定结果并在需要时自动退出→不需要if。 – 2011-03-15 09:07:00