目前正在使用target_link_libraries我链接了一些库,包括qt,glew和assimp 3.0
在cmake中我调用find(调用assimp-config),然后使用返回的ASSIMP_LIBRARIES
变量并将其传递给target_link_libraries,一切都很好,除了我的.app内的assimp dylib的路径是绝对的所有其他路径都相对于@executable并指向.app/Content/Frameworks/
文件夹,因此我可以分发我的应用程序。
到目前为止,我无法看到我在glew(例如)和assimp之间需要的区别,但当我检查依赖于otool -L
时,我可以看到无论我做什么assimp都链接到绝对路径并且我的应用程序无法在Frameworks
如何确保我的应用程序与该库的链接路径在应用程序包中是相对的?
答案 0 :(得分:3)
使用POST_BUILD
自定义命令使用install_name_tool
命令行工具修复相关的共享库安装名称,例如:
add_custom_command (TARGET myAppExecutable
POST_BUILD COMMAND "${CMAKE_INSTALL_NAME_TOOL}"
"-change" "/usr/local/lib/libassimp.dylib" "@executable_path/../Frameworks/libassimp.dylib"
"$<TARGET_FILE:myAppExecutable>" VERBATIM)