在使用brew qt5.13.0提供的qt框架创建我的项目的DragNDrop捆绑软件时,尽管我将rpath设置为将框架复制到捆绑软件中的路径,但rpath似乎不被接受。
我尝试过set(MACOSX_RPATH ON)
和set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
,但是结果仍然使用静态路径而不是rpath,并且无法在其他机器上找到捆绑的Framework brew qt 5.13.0
在5.9.5中,使我的cmake正常工作所需的全部是
set (CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
然后进一步包装
set (CPACK_GENERATOR "DragNDrop")
install (DIRECTORY ${Qt5_DIR}/../../QtCore.framework DESTINATION *.app/Contents/Frameworks)
install (DIRECTORY ${Qt5_DIR}/../../QtGui.framework DESTINATION *.app/Contents/Frameworks)
install (DIRECTORY ${Qt5_DIR}/../../QtPrintSupport.framework DESTINATION *.app/Contents/Frameworks)
install (DIRECTORY ${Qt5_DIR}/../../QtTest.framework DESTINATION *.app/Contents/Frameworks)
install (DIRECTORY ${Qt5_DIR}/../../QtWidgets.framework DESTINATION *.app/Contents/Frameworks)
install (FILES "${Qt5_DIR}/../../../plugins/platforms/libqcocoa.dylib" DESTINATION *.app/Contents/PlugIns/platforms)
在开源安装程序的qt 5.9.5上,我用otool -L看到以下结果
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1570.15.0)
/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.9.0, current version 5.9.5)
@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.9.0, current version 5.9.5)
@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.9.0, current version 5.9.5)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
当从brew使用qt 5.13.0时,我得到以下信息
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1575.17.0)
/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
/usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.13.0, current version 5.13.0)
/usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui (compatibility version 5.13.0, current version 5.13.0)
/usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore (compatibility version 5.13.0, current version 5.13.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
答案 0 :(得分:0)
经过大量的挖掘,我终于弄明白了发生了什么。
如here所示,当brew生成qt时,它们使用-no-rpath
选项。因此,我没有在我需要的框架上使用install_name_tool,而是发现了有关qt-online-installer的巧妙技巧。它是可脚本化的,我在其中找到了一个仓库,请参阅本劳的qtci。
然后添加
- git clone https://github.com/benlau/qtci.git;
- source qtci/path.env;
- install-qt-online qt.qt5.5130.clang_64 ~/
-travis.yml,我可以设置Qt_DIR="~/qt/5.13.0/clang_64/lib/cmake/Qt5"
并链接到预期的rpaths
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1575.17.0)
/System/Library/Frameworks/OpenCL.framework/Versions/A/OpenCL (compatibility version 1.0.0, current version 1.0.0)
@rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.13.0, current version 5.13.0)
@rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.13.0, current version 5.13.0)
@rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.13.0, current version 5.13.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 400.9.4)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.250.1)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)