testing - Gnu Makefile,编译应该失败

标签 testing shell makefile gnu-make

我有一组示例,我想确保它们无法编译。使用 *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

如你所见,我在这里遇到了几个困难:

  • 访问 shell-for 变量 cpp:$cpp\$cpp$$cpp 两者不工作。
  • 即使使用我的 if,make 在第一个 g++ 编译失败后停止。但这正是我想要的。我希望 g++-compile 失败被视为正确的行为。
  • Makefile 中的 Shell-for-loops 并不是最好的主意。有没有更好的办法?我想不出一个,因为我预计编译会失败,所以我没有正确的目标,对吧?

高级和可选:

  • 如果我能设法让上面的失败检查正常工作,我可以尝试第二遍编译,这次使用额外的-DEXCLUDE_FAIL,它会取出我的示例中有问题的行,然后代码应该可以编译。有什么想法吗?
  • 或者应该为此编写一个 Python 脚本...? ;-)

编辑:

我认为我的“高级和可选”现在给了我一个很好的主意。我可以再次使用 makes 依赖项检查。这里只是一个粗略的草图:

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

最佳答案

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

高级和可选:
1. 让我们先让它工作:)
2. 我个人不使用 python,因此这里没有必要 =:P

关于testing - Gnu Makefile,编译应该失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309108/

相关文章:

perl - 为什么我的 Perl 测试会因使用编码 'utf8' 而失败?

javascript - 使用 webpack 的 Angular 2 测试 karma 找不到变量 : Map

以 makefile 作为依赖项的 Makefile 目标

c - 如何正确链接 KBuild Makefile 以在内核模块中构建子文件夹

android - 如何在不先发布或签名的情况下轻松测试应用内购买?

javascript - 需要帮助在 Protractor 中使用 for 循环和 getText()

Linux cronjob 不工作(执行脚本)

shell - 对 xorg 的 apt-get 安装提示回答 '29'

shell - 命令行工具错误设计

c - 如何扩展makefile来编写库?