我正在尝试使用 CMake 函数 FIXUP_BUNDLE 来修复应用程序包,但我收到了安装时警告,并且由于缺乏更好的术语,而不是修复包。
安装的包具有正确的结构,但它使用的框架没有正确复制。只有每个框架的目录结构被复制,而不是实际的共享库二进制文件。例如,我的包使用 SFML 2.0 的系统框架。请注意,我使用的所有 SFML 框架都存储在/Library/Frameworks
. 以下是我MyApp.app/Contents/Frameworks/
对这个 SFML 组件的了解:
sfml-system.framework/
Versions/
2.0.0/
这就是我所得到的,只是目录。实际的 SFML System 框架具有如下结构:
sfml-system.framework/
Resources (this is a symlink)
sfml-system (this is a symlink)
Versions/
2.0.0/
Resources/
Info.plist
sfml-system (this is the actual library binary)
Current (this is a symlink)
在我的项目中,可执行文件都具有相同的格式,因此我有一个小功能可以使用这种通用格式添加它们。该函数只是添加可执行文件,设置要链接的库,并在安装时安装应用程序包并在其上调用 FIXUP_BUNDLE。这是该功能:
FUNCTION(ADD_CUSTOM_EXECUTABLE TARGET HEADERS SOURCES DEPENDENCIES)
ADD_EXECUTABLE(${TARGET} MACOSX_BUNDLE ${HEADERS} ${SOURCES} ${ARGN})
TARGET_LINK_LIBRARIES(${TARGET} ${DEPENDENCIES})
INSTALL(TARGETS ${TARGET} BUNDLE DESTINATION .)
INSTALL(CODE "
INCLUDE(BundleUtilities)
FIXUP_BUNDLE(${CMAKE_INSTALL_PREFIX}/${TARGET}.app \"\" \"\")
")
ENDFUNCTION(ADD_CUSTOM_EXECUTABLE)
我没有为 FIXUP_BUNDLE 的 LIBS 或 DIRS 参数传递任何内容,因为我目前没有使用任何插件。ALL_BUILD 项目在 Xcode 中构建良好,安装项目运行没有失败,但是对于通过otool -L
. 这是一个示例,显示了 SFML 系统框架的警告开始,几乎在 FIXUP_BUNDLE 被调用之后:
fixup_bundle
app='/Users/user/Desktop/SFML_Testing_BUILD/dist/MyApp.app'
libs=''
dirs=''
fixup_bundle: preparing...
warning: embedded item does not exist 'Users/user/Desktop/SFML_Testing_BUILD/
dist/MyApp.app/Contents/Frameworks/sfml-system.framework/Versions/2.0.0/
sfml-system'
warning: cannot resolve item '@executable_path/../Frameworks/
sfml-system.framework/Versions/2.0.0/sfml-system'
possible problems:
need more directories?
need to use InstallRequiredSystemLibraries?
run in install tree instead of build tree?
不久之后,像这样的东西:
warning: target '@executable_path/../Frameworks/sfml-system.framework/Versions/
2.0.0/sfml-system' is not absolute...
warning: target '@executable_path/../Frameworks/sfml-system.framework/Versions/
2.0.0/sfml-system' does not exist...
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/
usr/bin/otool: can't open file: @executable_path/../Frameworks/
sfml-system.framework/Versions/2.0.0/sfml-system (No such file or directory)
otool: can't open file: @executable_path/../Frameworks/
sfml-system.framework/Versions/2.0.0/sfml-system
(No such file or directory)
有谁知道如何解决这个问题?我在互联网上搜寻解决方案,但没有运气。