CMake单元测试问题与自定义命令和依赖项

时间:2010-02-19 10:50:26

标签: unit-testing cmake

我遇到了一个问题,我建立了一个共享库和一个单元测试可执行文件(位于子目录中)。我想将此测试作为共享库的POST_BUILD操作来执行。所以我给了

Add_Custom_Command (TARGET ShLibName POST_BUILD COMMAND unit_test_exe)

CMake在生成过程中抛出错误消息:

CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
"libCUEUtilities" of type SHARED_LIBRARY depends on "UtilitiesUnitTest" 
"UtilitiesUnitTest" of type EXECUTABLE depends on "libCUEUtilities"

这些目标中至少有一个不是STATIC_LIBRARY。只允许在静态库中使用循环依赖。

那么,我怎样才能实现我想要做的事情。

我正在使用带有VS2005生成器的CMake 2.8.1(RC3)。

1 个答案:

答案 0 :(得分:3)

听起来好像每次编译共享库时都要运行单元测试。由于测试可执行文件已经依赖于共享库,因此可以在构建单元测试可执行文件后将add_custom_command更改为运行。例如:

add_library(CUEUtilities SHARED ${CUEUTILS_LIBRARY_SOURCES})
add_executable(unit_test_exe ${UNIT_TEST_EXE_SOURCES})
target_link_libraries(unit_test_exe CUEUtilities)
add_custom_command(TARGET unit_test_exe POST_BUILD 
                   COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unit_test_exe)

更改任何库源将导致重新编译库。由于可执行文件对库具有依赖性,因此exe将重新链接,最后将再次运行构建后步骤。