【问题标题】:ctest does not invoke build type specific testsctest 不调用特定于构建类型的测试
【发布时间】:2017-09-27 16:42:16
【问题描述】:

我正在尝试创建一个 CMake 项目,我想根据构建类型在其中执行测试。 例如。如果我进行性能构建,我想运行性能测试等。

我发现 add_test 为此目的提供了CONFIGURATIONS 参数。但是,如果我在那里提供构建类型,ctest 找不到任何测试。

这是一个极简主义的CMakeLists.txt 再现行为。

project (test NONE)
include (CTest)

add_test (NAME test
  CONFIGURATIONS Release
  COMMAND cowsay)

在外壳中:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release .. 
cmake --build .
ctest

输出:

Running tests... 
Test project /home/phil/cmaketest/build 
No tests were found!!!

如果我跑步

ctest -C Release

我得到了所需的行为,即执行了测试,但我宁愿不必手动输入-C Release

我在这里做错了什么还是这是缩进的行为?

【问题讨论】:

    标签: cmake automated-tests ctest


    【解决方案1】:

    add_test (... CONFIGURATIONS ...) 正是为了以后使用ctest -C ... 运行特定配置的测试。

    所以是的,这是有意的。原因是它以相同的方式支持单配置和多配置构建环境。

    如果您只想支持单一配置环境,您可以这样做:

    if (CMAKE_BUILD_TYPE MATCHES "Release")
        add_test (
            NAME test
            COMMAND cowsay
        ) 
    endif()
    

    【讨论】:

    • 奇怪的是,不同的测试在构建步骤中需要不同的编译/链接标志,但我可以做一些事情,比如使用cmake -DCMAKE_BUILD_TYPE=Release .. ; cmake --build . 进行发布构建,然后使用ctest -C Coverage。但这显然应该被禁止。但以我目前的设置,它只会给出毫无意义的结果。
    猜你喜欢
    • 2010-10-18
    • 2018-01-22
    • 2011-08-02
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 2011-12-07
    相关资源
    最近更新 更多