linux 하지 CMake로 바이너리 생성하기는 런타임 경로를 제거한다.




매트랩 유효 하지 않은 파일 id 입니다 fopen 을 사용 하여 유효한 파일 id 를 생성 하십시오 (3)

나는 리눅스에서 프로그램을 만들기 위해 CMake를 사용하고있다. 프로그램이 성공적으로 컴파일되고 프로젝트 빌드 디렉토리에서 실행됩니다. 이 프로그램은 ${HOME}/build/lib 디렉토리에있는 커스텀 라이브러리와 링크되어있다.

설치 단계가 있습니다.

install(TARGETS ProgName RUNTIME DESTINATION bin)

make install 실행하면 프로그램이 올바른 위치에 cmakecmake 설치 프로그램은 이진 파일에서 런타임 경로를 제거합니다.

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

가능하다면 광산을 시스템 라이브러리 위치로 제한하고 싶습니다. 그래서 LD_LIBRARY_PATH 변수의 오용에 대해 인터넷에서 기사를 읽었습니다. 나는 기본 링커 검색 경로에 위치를 추가 할 수 없기 때문에 나는 sysadmin이 아니다.

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

건배


이것은 CMake 2.8에서 작동합니다.

 set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)

여기서 foo 는 앞서 정의한 대상입니다.

 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"

참고 : cmake 스크립트 자체를 수정하고 싶지 않은 경우 property를 설정하면 런타임 경로를 제거하지 말 것을 지시하는 지시문을 사용하여 cmake 를 시작할 수 있습니다.
변수 " CMAKE_SKIP_RPATH "를 사용하여 " 빌드를 제어하는 ​​변수 "를 참조하십시오.

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

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

전달에 이미 올바른 런타임 경로가 포함되어 있으면 해당 지시문은 cmake 가 전달에 포함 된 현재 런타임 경로를 수정하지 못하게합니다.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake







cmake