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如何使失败的测试工作....非平凡,但可行。我认为这可以做到,对吧?

回答:

  1. 适合我。你在echo中得到什么?
  2. 然后您需要否定if中的条件。现在,当文件不能编译时它会退出,而AFAIU则需要相反的结果。
  3. 为什么这不是一个好主意?但是你可以编写一个脚本,调用$(CXX)并返回一个合适的错误代码(如果它没有编译,则返回0)。然后你可以用这个脚本有正常的目标。我对GNU make的细节不太了解,可能是内建的东西。

高级&可选:
1.让我们先来使事情工作:)
2.我个人不使用Python,因此不认为有必要在这里=:P

以上是 Gnu Makefile,编译应该失败 的全部内容, 来源链接: utcz.com/qa/263835.html

回到顶部