2010-02-19 97 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文件將被重新鏈接,最終生成後步驟將再次運行。