2016-05-31 1 views
0

그런 먼 곳에서 CMake 파일을 어떻게 할 것인가? 의존성 순서를 처리 할 필요가 없습니까? (내 이전 질문에 관한 문제 Strange error: undefined reference to `class::class()' 참조).CMake와의 C++ 라이브러리의 상호 의존

예를 들어

당신이

add_library({MY_LIB} A B C) 

어떻게 순서를 따르도록 강제하지 않도록 할 코드 것의 회전에 의해 LIB C 하나의 종속 된, LIB B의 종속 lib에는이 있다면? 가까운 과거에 방금 했어요

target_link_libraries({MY_LIB} {MY_LIB}) 

그러나 이것은 더 이상 작동하지 않습니다 .... 나는 왜 (???)를 모르겠다. 상호 의존 라이브러리가 많기 때문에이 문제는 매우 자극적입니다 ...

제안 사항 (우분투 4.8.4-2ubuntu1 ~ 14.04.3에서 cmake 3.5.2, gcc 버전 4.8.4 사용)?

+0

'target_link_libraries ({MY_LIB} {MY_LIB})'가 실패한 CMakeLists.txt를 포함시킬 수 있습니까? – buratino

답변

2

add_library 명령을 사용하여 각 라이브러리를 만든 다음 target_link_libraries으로 종속성을 설정하면 충분합니다.

예를 들어 라이브러리가 STATIC 또는 SHARED을 경우

add_library(A ${sources_for_A}) 
add_library(B ${sources_for_B}) 
add_library(C ${sources_for_C}) 

target_link_libraries(A B) # A depends on B 
target_link_libraries(B C) # B depends on C 

# Executable using the libraries 
add_executable(program ${sources_for_program}) 
target_link_libraries(program A) # Program uses library A (and B and C indirectly) 

그것은 문제가 안된다.

+0

target_link_library 또는 target_link_libraries? 차이점은 무엇입니까? – Courier

+0

하지만 여기서는 피할 필요가있는 명령을 처리하고 있습니다. – Courier

+0

이 오류 메시지가 표시됩니다. '알 수없는 CMake 명령 "target_link_library" – Courier

관련 문제