2016-12-12 5 views
0

저는 항상 빌드 트리에서 실행 파일을 실행합니다 (나는 cmake "install"에서 실행하지 않습니다). 라이브러리,의는 fruit을 부르 자, 프레임 워크로 구축 :빌드 트리에 rpath 항목 추가 생성 된 실행 파일

add_library(fruit SHARED ${FRUIT_SOURCES}) 
set_target_properties(fruit PROPERTIES FRAMEWORK TRUE) 
set_target_properties(fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE 
          INSTALL_NAME_DIR "@rpath/Frameworks" ) 

는 지금은 cmake로 (executable라고 함)의 주요 응용 프로그램에 대한 사용자 정의 RPATH를 설정합니다. 내가 생성 프로그램 내 rpaths을 정의 할 수 executableINSTALL_RPATH 대상 속성을 사용할 수 있다고 생각하지만, 이것은 단지 설치된 실행 파일 (난 항상 cmake 빌드 폴더에 내 응용 프로그램을 실행 기억)에 대한 작동하는 것 같다 :

# this rpath is not shown in the generated executable (otool -l -v executable): 
set_target_properties(executable PROPERTIES INSTALL_RPATH "@executable_path/lib/") 

빌드 트리에서 생성 된 프로그램에 rpath 항목을 정의/추가하는 방법은 무엇입니까?

추신.이 라이브러리 fruit은 실제 문제의 예일뿐입니다. 라이브러리는 라이브러리에 BUILD_WITH_INSTALL_RPATH 속성을 추가하는 subcmake 프로젝트 (git 하위 모듈)에서 생성됩니다. 하지만이 프로젝트의 코드를 변경할 가능성이 있습니다. 빌드 트리에서 실행 파일을 처리 할 수있는 더 좋은 방법이 있습니까?

답변

0

이것은 주요 질문에 대한 대답이 아니지만 포스트 스크립트에 대한 대답을 알아 냈습니다. 이것은 주된 질문에서 찾은 것보다 나은 해결책이지만, 나는 그 질문을 계속하도록 내버려 둔다.

set(CMAKE_MACOSX_RPATH TRUE) 
set(CMAKE_SKIP_BUILD_RPATH FALSE) 
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 

################################################################################ 
# this is more interesting later when we implement install (i.e. creating a 
# bundle on macOS)in this CMakeLists! 
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) 
# the RPATH to be used when installing, but only if it's not a system directory 
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) 
if("${isSystemDir}" STREQUAL "-1") 
    set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") 
endif("${isSystemDir}" STREQUAL "-1") 
################################################################################ 

# add the dynamic library 
add_library(fruit SHARED ${FRUIT_SOURCES}) 
set_target_properties(fruit PROPERTIES FRAMEWORK TRUE) 
# remove the properties INSTALL_NAME_DIR and BUILD_WITH_INSTALL_RPATH: 
#set_target_properties(fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE 
#        INSTALL_NAME_DIR "@rpath/Frameworks" ) 

코드는 here에서 가져온 것입니다. 이 blog post도 참조하십시오.