- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 CMake 中,可以使用 add_subdirectory(foo EXCLUDE_FROM_ALL)
排除在 foo
下定义的目标默认情况下构建,除非其他目标需要它们,如下所示:
add_subdirectory(foo EXCLUDE_FROM_ALL)
add_custom_target(wanted_foo_targets ALL DEPENDS
bar_tool # only build bar_tool from foo
)
假设 foo
定义了两个目标,bar_tool
和 foo_tool
, 并测试每个:
add_test(NAME test_foo_tool COMMAND foo_tool)
add_test(NAME test_bar_tool COMMAND bar_tool)
构建整体项目时,foo_tool
未构建,因为它不是任何东西的依赖项,而是 bar_tool
构建是因为它是 wanted_foo_targets
的依赖项.
但是 CTest 仍然注册了 test_foo_tool
工具,现在失败了,因为 foo_tool
不存在。
我可以删除/隐藏/跳过引用未构建目标的测试吗?我知道我可以使测试命令类似于 [ -f foo_tool ] && foo_tool
但这会错误地表明测试已通过。
如果我可以从父目录执行此操作,而无需修改内部测试的设置方式,则可加分 foo
.就我而言,foo
是第三方提供的项目,我不想在他们编写新测试时维护他们的代码补丁。
最佳答案
这可以通过使用 SKIP_RETURN_CODE 来完成测试属性与小型测试驱动程序脚本(您已经考虑使用)相结合。
在源代码目录下添加名为test_driver.sh
的测试驱动脚本,内容如下:
#!/bin/sh
if [ -x "$1" ] ; then exec "$1" ; else exit 127 ; fi
脚本检查是否存在作为第一个参数传递的测试可执行文件,如果不存在则退出并返回错误代码 127(也称为“未找到命令”)。
在您的 CMakeLists.txt 中按以下方式添加测试:
add_test(NAME test_foo_tool COMMAND "${CMAKE_SOURCE_DIR}/test_driver.sh" $<TARGET_FILE:foo_tool>)
set_tests_properties(test_foo_tool PROPERTIES SKIP_RETURN_CODE 127)
当您在缺少可执行文件 foo_tool
的情况下运行测试时,ctest 会将 test_foo_tool
报告为跳过的测试,而不是失败的测试。
$ ctest
...
Start 1: test_foo_tool
1/2 Test #1: test_foo_tool ....................***Skipped 0.01 sec
Start 2: test_bar_tool
2/2 Test #2: test_bar_tool .................... Passed 0.01 sec
100% tests passed, 0 tests failed out of 2
Total Test time (real) = 0.03 sec
The following tests did not run:
1 - test_foo_tool (Skipped)
关于cmake - 如果未构建目标则跳过 CTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54525943/
我希望 ctest 在默认情况下向我显示失败的测试输出。也就是说,我要运行: $ make all test 无需 cat Testing/Temporary/LastTest.log 即可查看失败测
我发现通用 ctest命令没有提供关于测试的太多信息,所以我想添加 ctest --output-on-failure但不必让用户担心标志。我希望他们只是cmake , make项目并运行 ctest
我有一个结构的项目 ├── CMakeLists.txt ├── mzl.c ├── mzl.h └── tests ├── CMakeLists.txt ├── mzl-commun
我有一个基于 CMake 的项目,它由几个子组件组成,它们都可以独立编译和测试。目录布局如下所示: . ├── CMakeLists.txt ├── comp1 │ ├── CMakeLists.
在 CMake 中,可以使用 add_subdirectory(foo EXCLUDE_FROM_ALL)排除在 foo 下定义的目标默认情况下构建,除非其他目标需要它们,如下所示: add_subd
在 CMake 中,可以使用 add_subdirectory(foo EXCLUDE_FROM_ALL)排除在 foo 下定义的目标默认情况下构建,除非其他目标需要它们,如下所示: add_subd
这个问题在这里已经有了答案: How to tell a test under cmake/ctest where to find its input data ... without changi
我的 cmake 项目具有以下树结构: ├── CMakeLists.txt ├── basis ├── build ├── deps ├── study 其中 /deps 包含所有第 3 方依赖项,
我只想运行特定选择的测试。来自CMake Documentation我找到了 -R 和 -E , 所以我可以运行像 ctest -E UNWANTED_TESTS -R WANTED_TESTS 这
假设在 CMakeLists.txt 我有 add_executable(mytarget main.cpp) enable_testing() add_test(mytarget_test0 myt
我找不到如何指定标签。应该是这样的 ADD_TEST( FirstTest RunSomeProgram "withArguments" ) SET_TESTS_PROPERTIES( FirstTe
我想默认禁用一组测试,但能够在明确定位时运行它们。 例如。假设我有一个项目,其中包含许多通过 add_test(NAME SomeNameHere COMMAND SomeCommandHere) 添
我为我的项目编写了许多单元测试,并使用 CTest 执行。我想将结果集成到我的 TeamCity 构建中。我已经为我的测试框架(Boost Test)下载并设置了插件。 我遇到的问题是,测试运行时使用
我正在使用 CMake 开发一个项目,并且刚刚集成了一些 CppUnit 测试。我想使用 CTest,因此我在 CMakeLists.txt 文件中使用了 add_test,以便在键入 make te
当我使用 ctest 接口(interface)进行 cmake ( add_test(...) ),并运行 make 目标 make test ,我的几个测试失败了。当我直接从二进制构建文件夹的命令
如上指定 https://cmake.org/cmake/help/v3.7/manual/ctest.1.html , ctest 支持过滤测试以通过正则表达式运行。不幸的是,我似乎无法找出 cte
打电话 ctest -j4 -DCTEST_MEMORYCHECK_COMMAND="/usr/bin/valgrind" -DMemoryCheckCommand="/usr/bin/valgrin
我正在尝试为某些遗留软件创建一些集成测试。当前进行测试的方法是使用已知输入运行代码,然后手动将输出与已知输出进行比较。 我想自动化这个过程,因为我已经在使用 CMake 我想用 CTest 来做这个。
我的任务是为基于 C++ 的项目构建 Python 绑定(bind)(使用 swig)。该项目使用 cmake 进行构建,使用 ctest 进行测试,并且应该将绑定(bind)的构建和测试集成到其中。
我可以在 this 之后使用 cmake 运行覆盖率检查维基页面。这非常简单,只需设置一个仪表板,我就可以在浏览器上很好地查看代码覆盖率(后一部分)。但我不想每次都 ctest 只是为了检查单个文件的
我是一名优秀的程序员,十分优秀!