2016-10-20 38 views
5

Làm cách nào để đặt nhiều thư mục RPATH trên một mục tiêu trong CMake trên MacOS? Trên Linux, chúng ta chỉ có thể sử dụng một danh sách thư đại tràng được tách biệt:Cách đặt nhiều thư mục RPATH bằng CMake trên MacOS

set_target_properties(mytarget 
    PROPERTIES 
    INSTALL_RPATH "\$ORIGIN/../lib:\$ORIGIN/../thirdparty/lib" 
) 

trên hệ điều hành MacOS, chúng tôi về mặt kỹ thuật có thể thêm một dấu hai chấm tách ra danh sách và otool -l nên hiển thị nó, nhưng những thư mục không được tìm kiếm:

set_target_properties(mytarget 
    PROPERTIES 
    INSTALL_RPATH "@loader_path/../lib:@loader_path/../thirdparty/lib" 
) 

Thông thường, nếu tôi định có nhiều thư mục RPATH trên MacOS, tôi sẽ gửi nhiều cờ liên kết và những cờ này sẽ hiển thị riêng với otool -l. Một cái gì đó như:

g++-mp-4.7 mytarget.cpp -o mytarget -Wl,-rpath,@loader_path/../lib,-rpath,@loader_path/../thirdparty/lib 

Mà cho:

Load command 15 
      cmd LC_RPATH 
     cmdsize 32 
     path @loader_path/../lib (offset 12) 
Load command 16 
      cmd LC_RPATH 
     cmdsize 48 
     path @loader_path/../thirdparty/lib (offset 12) 

Làm thế nào để tái tạo lại hành vi này với CMake?

Trả lời

7

Theo documentation, những con đường không nên được tách ra với dấu hai chấm, nhưng với phẩy:

set_target_properties(mytarget 
    PROPERTIES 
    INSTALL_RPATH "@loader_path/../lib;@loader_path/../thirdparty/lib" 
) 

Hoặc, sử dụng lệnh set để giao dịch CMake với separator:

set(MY_INSTALL_RPATH 
    "@loader_path/../lib" 
    "@loader_path/../thirdparty/lib" 
) 
set_target_properties(mytarget 
    PROPERTIES 
    INSTALL_RPATH "${MY_INSTALL_RPATH}" 
) 

EDIT: (cảm ơn Tsyvarev cho nhận xét)

Hoặc, sử dụng lệnh set_property, mà chấp nhận tính multivalue:

set_property(
    TARGET mytarget 
    PROPERTY INSTALL_RPATH 
    "@loader_path/../lib" 
    "@loader_path/../thirdparty/lib" 
) 
+1

.. hoặc sử dụng 'set_Property (MỤC TIÊU)' mà chấp nhận tính multivalue. – Tsyvarev

+0

@wasthishelpful Làm việc như một say mê. Cảm ơn! – wyer33

Các vấn đề liên quan