2010-07-28 31 views
18

Tôi đang sử dụng CMake để xây dựng một chương trình trên Linux. Chương trình biên dịch thành công và chạy từ thư mục build project. Chương trình này được liên kết với một thư viện tùy chỉnh trong thư mục ${HOME}/build/libTạo nhị phân với CMake loại bỏ đường dẫn thời gian chạy

Tôi có một giai đoạn cài đặt với:

install(TARGETS ProgName RUNTIME DESTINATION bin) 

Khi tôi chạy make install chương trình được đặt ở vị trí chính xác, nhưng bộ cài đặt cmake loại bỏ thời gian chạy đường dẫn từ nhị phân.

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

Tôi đã đọc bài viết trên internet thảo luận về việc sử dụng sai của biến LD_LIBRARY_PATH vì vậy tôi muốn giữ tôi hạn chế đến các địa điểm thư viện hệ thống nếu có thể. Tôi không phải là sysadmin vì vậy tôi không thể thêm vị trí vào đường dẫn tìm kiếm liên kết mặc định.

Có ai biết cách tôi có thể giữ đường dẫn liên kết thời gian phát triển khi cài đặt hoặc ít nhất tùy chỉnh đường dẫn nào được thêm vào thời gian chạy không?

Cheers

Trả lời

9

Lưu ý: nếu bạn không muốn thay đổi cmake script tự, thiết lập thuộc tính xung quanh, bạn có thể khởi động bạn cmake với chỉ thị yêu cầu không xóa đường dẫn thời gian chạy:
Xem "Variables that Control the Build", có biến: "CMAKE_SKIP_RPATH"

Nếu đúng, không thêm thông tin đường dẫn thời gian chạy.

Nếu điều này được đặt thành TRUE, thì thông tin đường dẫn không được thêm vào tệp thi hành đã biên dịch.
Mặc định là thêm thông tin đường đi nếu nền tảng hỗ trợ nó. Điều này cho phép dễ dàng chạy từ cây xây dựng.
Để bỏ qua RPATH trong bước cài đặt, nhưng không phải là bước xây dựng, hãy sử dụng CMAKE_SKIP_INSTALL_RPATH để thay thế.

Nếu việc giao hàng đã chứa con đường thời gian chạy đúng, chỉ thị đó sẽ tránh cmake làm bất cứ điều chỉnh nào của con đường chạy hiện nay bao gồm trong nói giao hàng.

cmake -DCMAKE_SKIP_RPATH=ON xxx.cmake 
+2

Siêu! Cảm ơn bạn, tốt hơn nhiều so với câu trả lời đầu tiên! – Davide

+0

+1, cảm ơn câu trả lời này, chính xác những gì tôi đang tìm kiếm, tức là làm cho CMake * cư xử * như nó sẽ được thực hiện theo mặc định! –

0

Điều này phù hợp với CMake 2.8

set_target_properties(foo PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE) 

nơi foo là mục tiêu bạn đã định nghĩa trước đó:

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

Trước

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

Sau

% 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" 
Các vấn đề liên quan