2010-02-19 101 views
1

我面临一个问题,我建立一个共享库和单元测试可执行文件(它在一个子目录中)。我想将此测试作为共享库的POST_BUILD操作来执行。所以我给CMake单元测试问题与自定义命令和依赖关系

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。仅在静态库中允许循环依赖性。

那么,我该如何实现我想要做的。

我使用CMake 2.8.1(RC3)与VS2005发生器。

回答

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文件将被重新链接,最终生成后步骤将再次运行。