2016-10-20 8 views
5

Как установить несколько каталогов RPATH на цель в CMake на MacOS? В Linux, мы можем просто использовать двоеточие список разделенных на:Как установить несколько каталогов RPATH с помощью CMake на MacOS

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

На MacOS, мы можем технически добавить двоеточия списка и otool -l должны показать, но эти каталоги не искали:

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

Обычно, если бы у меня было несколько каталогов RPATH на MacOS, я бы послал несколько флагов компоновщика, и эти флаги будут отображаться отдельно с otool -l. Что-то вроде:

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

Что дает:

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) 

Как воссоздать это поведение с CMake?

ответ

7

Согласно documentation, пути не должны быть разделены двоеточием, но с запятой:

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

Или, используя команду set, чтобы CMake сделок с разделителем:

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

EDIT: (спасибо Цыварев за комментарий)

Или, используя команду set_property, которая принимает многозначное свойство:

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

.. или использовать 'set_property (TARGET)', который принимает многозначное свойство. – Tsyvarev

+0

@wasthishelpful Работал как шарм. Благодаря! – wyer33