2010-07-28 11 views
18

저는 CMake를 사용하여 리눅스에서 프로그램을 빌드하고 있습니다. 프로그램이 성공적으로 컴파일되고 프로젝트 빌드 디렉토리에서 실행됩니다. 이 프로그램은 디렉토리에서 사용자 지정 라이브러리와 연결되어 ${HOME}/build/libCMake로 바이너리 만들기는 런타임 경로를 제거합니다

내가는 설치 단계를 한로 :

install(TARGETS ProgName RUNTIME DESTINATION bin) 

내가 make install 프로그램이 올바른 위치하는 듯했지만 도착를 실행 cmake 설치 런타임을 제거 바이너리에서 경로.

-- Install configuration: "Debug" 
-- Installing: *binary name* 
-- Removed runtime path from "*binary name*" 

것은 나는 가능하면 시스템 라이브러리 위치에 제한 내를 유지하려면 있도록 LD_LIBRARY_PATH 변수의 오용을 논의 인터넷에서 기사를 읽었습니다. 나는 기본 링커 검색 경로에 위치를 추가 할 수 없기 때문에 나는 sysadmin이 아니다.

누구든지 설치시 또는 적어도 런타임에 추가되는 경로를 사용자 정의 할 때 개발 경로 연결 경로를 유지할 수있는 방법을 알고 있습니까?

건배

답변

9

주 보라 : 당신이 cmake 스크립트 자체를 수정하지 않는 경우, 주위 속성을 설정, 당신은 실행할 수 있습니다 런타임 경로를 제거하지 않도록 지시하는 cmake 지시문을 사용하십시오.
"CMAKE_SKIP_RPATH"

0123과 함께 " Variables that Control the Build"을 참조하십시오.

true 인 경우 런타임 경로 정보를 추가하지 마십시오.

TRUE로 설정하면 rpath 정보가 컴파일 된 실행 파일에 추가되지 않습니다.
기본값은 플랫폼에서 지원하는 경우 rpath 정보를 추가하는 것입니다. 이렇게하면 빌드 트리에서 쉽게 실행할 수 있습니다.
설치 단계에서는 RPATH을 생략하고 빌드 단계에서는 생략하려면 대신 CMAKE_SKIP_INSTALL_RPATH을 사용하십시오.

배달에 이미 올바른 런타임 경로가 포함 된 경우 해당 지시문은 cmake이 배달에 포함 된 현재 런타임 경로를 수정하지 못하도록합니다.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

슈퍼! 첫 번째 대답보다 훨씬 나은 감사합니다. – Davide

+0

+1,이 답변을 주셔서 감사합니다. 즉, CMake *가 기본적으로 수행해야하는 것처럼 동작하게 만드세요. –

0

이것은 CMake 2에서 작동합니다.foo 사용자가 정의한 대상이 8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

이전 :

project(foo) 
add_executable(foo ...) 
    ... 
install(TARGETS foo DESTINATION bin) 
    ... 

전에

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Removed runtime path from "/opt/mystuff/bin/foo" 

이에 대한

% sudo make install 
Install the project... 
-- Install configuration: "" 
-- Installing: /opt/mystuff/bin/foo 
-- Set runtime path of "/opt/mystuff/bin/foo" to "/opt/zzyzx/lib:/opt/bar/lib/x86_64"