2010-02-19 2 views
1

공유 라이브러리와 유닛 테스트 실행 파일 (하위 디렉토리에 있음)을 빌드 할 때 문제가 있습니다. 공유 라이브러리에 대해이 테스트를 POST_BUILD 조작으로 실행하려고합니다. 이러한 목표의커맨드와 의존성을 가진 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되지 않습니다 : 그래서

Add_Custom_Command (TARGET ShLibName POST_BUILD COMMAND unit_test_exe) 

CMake이 생성 과정 중에 오류 메시지가 발생했다. 순환 종속성은 정적 라이브러리에서만 허용됩니다.

그래서 어떻게 할 수 있습니까?

저는 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가 다시 링크되고 마지막으로 사후 빌드 단계가 다시 실행됩니다.