【发布时间】:2016-03-22 23:02:06
【问题描述】:
我们的 C++ 项目在 Boost/Test 中实现了相对大量的测试套件。所有测试都保留在主项目的树之外,每个测试套件都位于单独的 .cpp 文件中。因此,我们当前用于测试的 CMakeLists.txt 如下所示:
cmake_minimum_required(VERSION 2.6)
project(TEST_PROJECT)
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
set(SPEC_SOURCES
main.cpp
spec_foo.cpp
spec_bar.cpp
...
)
set(MAIN_PATH some/path/to/our/main/tree)
set(MAIN_SOURCES
${MAIN_PATH}/foo.cpp
${MAIN_PATH}/bar.cpp
...
)
add_executable (test_project
${SPEC_SOURCES}
${MAIN_SOURCES}
)
target_link_libraries(test_project
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}
)
add_test(test_project test_project)
enable_testing()
它工作正常,但问题是 SPEC_SOURCES 和 MAIN_SOURCES 是相当长的列表,有时有人会破坏主树或规范源中的文件之一。反过来,这使得构建目标可执行文件和测试其余部分变得不可能。必须手动找出问题所在,进入 CMakeLists.txt 并注释掉无法编译的部分。
所以,问题:有没有办法忽略无法在 CMake 中自动构建的测试、编译、链接并运行其余的测试(理想情况下,将失败的测试标记为“构建失败")?
远程相关的问题 Best practice using boost test and tests that should not compile 建议在 CMake 中使用 try_compile 命令。然而,在它的裸露形式中,它只是执行新的临时生成的 CMakeList(它会像原来的一样失败)并且没有任何钩子来删除不可编译的单元。
【问题讨论】:
-
你最大的问题是提交的代码有问题。
标签: c++ unit-testing boost cmake boost-test