我在CMake中有不同的测试版本,最后一个版本运行所有的测试。最后一个测试UTestAll
是否单独构建每个单元测试,如果是,是否意味着同一个测试最终会构建多次?也许有一种方法可以将单元测试分组,使其只构建一次?
或者说,有没有一种方法可以选择从运行中排除一个特定的目标?所以说,在某个时候,我不想在jenkins pipeline上运行UTestAll
,而是想在本地运行。
- #测试1 *
set(THIS UTest1)
string(TOUPPER DO_BUILD_${THIS} THIS_FLAG)
if (${THIS_FLAG})
add_executable(
${THIS}
src/Test1.cpp
)
target_include_directories(${THIS} PRIVATE include)
target_link_libraries(${THIS} PUBLIC lib1
endif()
- #测试2 *
set(THIS UTest2)
string(TOUPPER DO_BUILD_${THIS} THIS_FLAG)
if (${THIS_FLAG})
add_executable(
${THIS}
src/Test2.cpp
)
target_include_directories(${THIS} PRIVATE include)
target_link_libraries(${THIS} PUBLIC lib2
endif()
- #测试3 *
set(THIS UTest3)
string(TOUPPER DO_BUILD_${THIS} THIS_FLAG)
if (${THIS_FLAG})
add_executable(
${THIS}
src/Test3.cpp
)
target_include_directories(${THIS} PRIVATE include)
target_link_libraries(${THIS} PUBLIC lib3
endif()
- #运行所有测试 *
set(THIS UTestAll)
string(TOUPPER DO_BUILD_${THIS} THIS_FLAG)
if (${THIS_FLAG})
add_executable(
${THIS}
src/Test1.cpp
src/Test2.cpp
src/Test3.cpp
)
target_include_directories(${THIS} PRIVATE include)
target_link_libraries(${THIS} PUBLIC lib1 lib2 lib3
endif()
1条答案
按热度按时间7xllpg7q1#
基本上,您可以将每个测试构建为一个对象库,从每个对象库创建一个可执行文件,然后使用所有对象库创建另一个可执行文件,如下所示:
看一下CMake宏可能是有意义的,所以它不是那么重复。看一下
ctest
和一些测试框架(GoogleTest,Catch2或类似的东西)也可能是有意义的。