【问题标题】:make distcheck and tests that need input files进行需要输入文件的 distcheck 和测试
【发布时间】:2012-07-04 21:16:17
【问题描述】:

我最近将我的构建系统转换为 automake/autoconf。在我的项目中,我有一些单元测试需要运行它们的目录中的一些输入数据文件。当我运行 make distcheck 并尝试构建 VPATH 时,这些测试失败,因为它们显然不是从输入文件所在的目录运行的。我想知道是否有一些快速解决方法。例如,我能否以某种方式告诉系统不要在 make distcheck 上运行这些测试(但仍然在 make check 上运行它们)?或者在运行测试之前 cd 到文件所在的目录?

【问题讨论】:

    标签: unit-testing automake


    【解决方案1】:

    我遇到了同样的问题并使用了类似于威廉的解决方案。我的 Makefile.am 看起来像这样:

    EXTRA_DIST = testdata/test1.dat
    
    AM_CPPFLAGS = -DDATADIR=\"$(srcdir)/\"
    

    然后,在我的单元测试中,我使用 DATADIR 定义:

    string path = DATADIR "/testdata/test1.dat"
    

    这适用于make checkmake distcheck

    【讨论】:

      【解决方案2】:

      典型的解决方案是编写测试,以便它们在源目录中查找数据文件。比如可以在测试中引用$srcdir,或者将test转换成test.in后引用@srcdir@

      如果您的测试都在源目录中,您可以通过在 Makefile.am 中设置 TESTS_ENVIRONMENT 来运行该目录中的所有测试:

      TESTS_ENVIRONMENT = cd $(srcdir) &&
      

      如果您的某些测试是由 configure 创建的,因此这将失败,因此只存在于 build 目录中,在这种情况下,您可以选择性地 cd 使用以下内容:

       TESTS_ENVIRONMENT = { test $${tst} = mytest && cd $(srcdir); true; } &&
      

      尝试像这样使用 TESTS_ENVIRONMENT 充其量是脆弱的,最好编写测试以便它们在源目录中查找数据文件。

      【讨论】:

      • 我的测试在 src/some/path 并且数据文件在同一个目录下。我已经尝试过 TESTS_ENVIRONMENT = cd $(srcdir) && 技巧,但它没有用,因为现在它不再找到测试可执行文件了。将所需的数据文件复制到当前目录也不起作用,因为在 VPATH 构建中,您显然没有对运行测试的目录的写入权限。
      • @Martin,您没有对源目录的写入权限,但您对构建目录有写入权限。你是如何复制文件的?只需将 EXTRA_DIST = datafile 添加到 Makefile.am 并在 test.in 中添加 cp ${srcdir}/datafile . 即可。但是,如果测试是从源目录运行的,那么由于写入权限,尝试复制将失败。我怀疑您有一些从构建目录运行的测试和一些从源目录运行的测试。 (名为*.in 的测试(可能)从构建目录运行,而其他测试从源目录运行。)
      • 这看起来和我要找的完全一样,但这似乎不适用于 Automake 1.15,不幸的是:这样,它会在源目录中创建 *.log*.trs 文件(这已经很糟糕了),但仍然在构建目录中查找它们,当然,在那里找不到它们(这是致命的)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多