Also, wenn Sie bereits ein binäres haben, können Sie eine rpath, um es auf OSX mit dem ‚install_name_tool‘, wie so hinzufügen:Wie fügen Sie einen rpath zu einer ausführbaren Datei in cmake auf Build (nicht installieren) auf OSX hinzu?
install_name_tool -add_rpath @executable_path/blah
Xcode tut dies automatisch, wenn Sie ein Anwendungspaket Gebäude sind.
Ich weiß, dass in Cmake Sie dies die install_name der gemeinsam genutzten Bibliothek festlegen können:
set_target_properties(nshared PROPERTIES BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")
Meine Frage ist, was ist das Äquivalent dies eine rpath in ein binäres hinzufügen?
(für das ‚Warum würden Sie das tun?‘ Unter euch, auf die gehen sehen otool -l auf eine der Anwendungen in Ihren Anwendungen/Ordner, und Sie werden viele Anwendungen mit Einträgen wie sehen:
.Load command 15
cmd LC_RPATH
cmdsize 36
path @executable_path/../../Frameworks/
Diese gängige Praxis versuche ich es in cmake)
Nach meiner Erfahrung verursacht diese Lösung einen Fehler bei jedem Build nach dem ersten Build aus einem sauberen Verzeichnis. Der benutzerdefinierte Befehl POST_BUILD wird bei jedem Build ausgeführt, unabhängig davon, ob das Ziel veraltet ist oder nicht, und install_name_tool gibt einen Beendigungsstatus ungleich Null zurück und zeigt eine Meldung an, dass der hinzugefügte rpath-Wert bereits in der Zieldatei vorhanden ist (weil er hinzugefügt wurde) während des ersten Builds). CMake's Dokumentation scheint anzuzeigen, dass der POST_BUILD Befehl nur ausgeführt wird, wenn das Ziel veraltet ist, aber das scheint nicht der Fall zu sein. – mjl5007
Diese Antwort funktioniert –