2010-08-23 5 views
21

add_subdirectory가 추가 된 디렉토리에 정의 된 대상과 함께 install (TARGETS ...)을 사용할 수 있습니까?install (TARGETS ...) 및 add_subdirectory

나의 유스 케이스는 gtest 용 rpm을 e.gg로 만들고 싶다. gtest 프로젝트는 설치 문없이 CMakeLists.txt를 갖습니다. gtest의 CMakeLists.txt에이 문장을 추가하지 않고 패키지를 만들고 싶습니다.

나는이 결과 디렉토리 구조를 가지고 :

+ gtest-1.5.0/... 
+ CMakeLists.txt 

gtest-1.5.0의 CMakeLists이 같은 라이브러리를 정의

cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc) 
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc) 
target_link_libraries(gtest_main gtest) 

지금 난 내 CMakeLists이 뭔가를 추가 할 수 있습니다. txt :

add_subdirectory(gtest-1.5.0) 
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib) 

그러나 cmake는 올바르게 :

CMake Error at CMakeLists.txt:10 (install): 
    install TARGETS given target "gtest" which does not exist in this 
    directory. 

gtest-1.5.0을 패치하지 않고이를 수행 할 수있는 방법이 있습니까?

답변

8

대상을 설치하는 대신 파일 설치를 시도해 볼 수 있습니다. 단점은 공유 및 정적 빌드를 처리해야한다는 것입니다.

install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)

+0

확인 ..이 일할 수있는,하지만 난 target_link_libraries에서 정의 된 이름을 사용하고있는 명령을 설치할 수없는 이유는, 이해가 안 돼요! – Gizmomogwai

+2

설치 명령은 모든 대상을 검색하는 target_link_libraries와 달리 대상이 있는지 알아낼 때 현재 디렉토리를 찾습니다. – RobertJMaynard

+0

Ok ... 설명을 주셔서 감사합니다. 이런 식으로 생각했는데 확실하지 않았습니다. (설치 (FILES 명령은 파일에 ARCHIVE 매개 변수를 사용하지 않으므로) 설치를 편집 할 수 있습니까? – Gizmomogwai