2017-11-22 11 views
2

정적 라이브러리를 개발 중이며 CMake를 사용하고 있습니다. 이 라이브러리에는 부스트가 필요합니다. 그래서 나는 다음과 같이했다 :CMake는 절대 경로로 대상을 내 보냅니다.

set(LIBRARY_NAME "MyLib") 
set(LIBRARY_VERSION 1.0.0) 
project(${LIBRARY_NAME} VERSION ${LIBRARY_VERSION}) 

set(Boost_USE_STATIC_LIBS ON) 
set(Boost_USE_MULTITHREADED ON) 
find_package(Boost COMPONENTS system filesystem regex thread date_time log log_setup REQUIRED) 
include_directories(${Boost_INCLUDE_DIR}) 
link_directories(${Boost_LIBRARY_DIR}) 

add_library(${LIBRARY_NAME} STATIC xx.cpp) 

target_link_libraries(${LIBRARY_NAME} PUBLIC ${Boost_LIBRARIES}) 

지금까지는 모든 것이 잘된다.

이제이 라이브러리를 설치 가능하게 만들어야합니다. 따라서이 튜토리얼을 따릅니다. https://cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html

내 컴퓨터에서 모든 것이 잘 보입니다. 그러나 설치된 파일 (make-install을 호출하여 생성 된 파일)을 다른 컴퓨터로 옮기고 find_package (MyLib)를 사용하여이 파일을 사용하려고 시도했을 때, 내 원래 기계에. 나는 MyLibTargets.cmake 파일을 파고 절대 경로를 보았습니다 부스트 라이브러리!

왜 이런 일이 발생하고 있습니까? 이걸 어떻게 막을 수 있니?

+0

"설치된 파일을 다른 컴퓨터로 이동"한다는 의미를 명확히해야합니다. – Marcel

+0

@Marcel make-install을 호출하여 생성 된 파일 –

+2

'왜 이런 일이 일어나는가? '-'find_package (Boost)'는 라이브러리를 향상시키는 절대 경로를 설정하기 때문에 CMake 패키징 메커니즘은이 경로를'.cmake' 스크립트에 저장한다. 귀하의 패키지를 검색하십시오. '어떻게하면 안되지? '-'MyLibConfig.cmake' (또는'MyLibTargets.cmake'와 같이 그것에 포함 된 파일) **을 수동으로 작성하십시오 **. 더 간단한 방법은 ... Boake가 표준 위치에 설치되었다는 것을 CMake에게 알려주기를 원합니다.이 위치는 링커에 의해 자동으로 검색되며 (라이브러리는 전체 경로가 필요하지 않습니다) 컴파일러에 의해 자동으로 검색됩니다 (디렉토리는 전체 경로가 필요하지 않습니다). 그렇지? – Tsyvarev

답변

0

cmake 빌드 디렉토리를 다른 컴퓨터에서 사용한 경우이 방법은 작동하지 않습니다. cmake는 동일한 작업 디렉토리에서 다른 플랫폼을 지원하기위한 것이 아닙니다.

이 목적으로 외부 빌드를 사용해야합니다. 그러나 일단 cmake를 사용하여 빌드를 수행하면 디렉토리가 구워지고이 소스 트리에 대한 소스 빌드가 더 이상 작동하지 않습니다. 이 경우 소스 트리를 다시 작동 시키려면 모든 cmake 임시 파일과 폴더를 삭제해야합니다.

+0

감사합니다. 사실, 나는 build 디렉토리를 옮기지 않았다. 나는 make-install이 생성 한 파일을 옮겼다. –