Gnu Makefile,编译应该失败
我有一个例子集合,我想确保它们编译失败。使用* 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
如何使失败的测试工作....非平凡,但可行。我认为这可以做到,对吧?
回答:
- 适合我。你在
echo
中得到什么? - 然后您需要否定
if
中的条件。现在,当文件不能编译时它会退出,而AFAIU则需要相反的结果。 - 为什么这不是一个好主意?但是你可以编写一个脚本,调用
$(CXX)
并返回一个合适的错误代码(如果它没有编译,则返回0)。然后你可以用这个脚本有正常的目标。我对GNU make的细节不太了解,可能是内建的东西。
高级&可选:
1.让我们先来使事情工作:)
2.我个人不使用Python,因此不认为有必要在这里=:P
以上是 Gnu Makefile,编译应该失败 的全部内容, 来源链接: utcz.com/qa/263835.html