我遇到了一个问题,我建立了一个共享库和一个单元测试可执行文件(位于子目录中)。我想将此测试作为共享库的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)。
答案 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将重新链接,最后将再次运行构建后步骤。