我有一些示例,我想确保它们无法编译。使用* 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 ++ - 编译被认为是正确的行为。高级和可选:
-DEXCLUDE_FAIL
,它从中取出违规行我的例子,然后代码应该编译。有什么想法吗?修改
我认为我的“先进和可选”现在给了我一个很好的主意。我可以再次使用make依赖检查。这里只是一个粗略的草图:
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)
这是优雅的吗?然后我只需要弄清楚-DEXCLUDE_FAILCODE
如何使失败的测试工作....非平凡,但可行。我认为可以做到,对吧?
答案 0 :(得分:1)
echo
得到什么?if
中否定条件。现在,当文件无法编译时退出,而AFAIU则需要相反。$(CXX)
并返回一个正确的错误代码(如果它不编译,则返回0)。然后,您可以使用此脚本获得正常目标。我对GNU make的具体细节不是很了解,可能是内置的东西。高级&amp;可选:
让我们先让事情发挥作用:)
2.我个人不使用python,因此在这里看不到需要=:P