如何使用 CMAKE 将库包含在 OSX 捆绑包中

jus*_*018 5 c++ macos cmake dylib clion

我正在尝试使用 Clion 和 Cmake 构建 OSX 捆绑包,目前库链接正确,因为我没有预编译错误,但是当我构建并尝试运行程序时,出现以下错误

    dyld:未加载库:libxl.dylib
    参考自:
    /路径/到/可执行文件/
      原因:找不到图片

我搜索过这个问题,似乎找不到明确的解决方案,这可能是由于我缺乏 CMake 和 C++ 的经验。

如果有人有解决方案或可以指出我应该阅读的内容以进一步理解这一点,我将不胜感激。

请参阅下面的 CMakeLists.txt

    cmake_minimum_required(版本3.7)
    项目(项目名称)

    设置(CMAKE_CXX_STANDARD 14)

    设置(SOURCE_FILES main.cpp)

    find_package(需要Qt5Core)
    find_package(需要 Qt5Widgets )
    find_package(需要 Qt5Gui )

    设置(PROJECT_LINK_LIBS libxl.dylib)
    link_directories(${CMAKE_SOURCE_DIR}/LibXL/lib)
    include_directories(${CMAKE_SOURCE_DIR}/LibXL/include_cpp)


    #Mac 捆绑包(在 Mac 上构建)
    add_executable(project_target_mac MACOSX_BUNDLE main.cpp)
    qt5_use_modules(project_target_mac核心小部件GUI)
    target_link_libraries(project_target_mac Qt5::Widgets)
    target_link_libraries(project_target_mac ${PROJECT_LINK_LIBS} )
    #set_target_properties(project_target_mac PROPERTIES INSTALL_RPATH "${CMAKE_SOURCE_DIR}/LibXL/lib")

    add_executable(project_target ${SOURCE_FILES})
    qt5_use_modules(project_target核心小部件GUI)
    target_link_libraries(project_target Qt5::Widgets)
    target_link_libraries(project_target ${PROJECT_LINK_LIBS

} )

ant*_*ine 0

在 OSX 上,人们通常使用框架并将其通过安装规则集成到应用程序包中。

该规则如下所示:

    install( DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/ofxSyphon/libs/Syphon/lib/osx/Syphon.framework"
    DESTINATION ${APP_NAME}.app/Contents/Frameworks")
Run Code Online (Sandbox Code Playgroud)

然后框架文件夹将被复制到Contents/Frameworks应用程序包的子文件夹中。为此,应用程序本身应该安装如下内容:

install(TARGETS ${APP_NAME} DESTINATION .)
Run Code Online (Sandbox Code Playgroud)

并且您可能需要使用 指定安装前缀CMAKE_INSTALL_PREFIX,默认为/usr/local

对于单个库文件,该过程非常相似,但您还必须调整RPATH应用程序以添加可执行文件的库的相对路径才能找到它。框架不需要这部分,因为它们具有标准化的文件夹结构,并且可执行文件会查找它的依赖项。