在使用Appstore的情况下,还有另一种方法需要“权利”,因此需要与Apple框架链接。
为了使权利起作用(例如GameCenter),您需要具有“将二进制文件与库链接” -buildstep,然后与“ GameKit.framework”进行链接。CMake将库“低级”“注入”到命令行中,因此Xcode并不真正了解它,因此您不会在“功能”屏幕中启用GameKit。
使用CMake并具有“与二进制文件链接” -buildstep的一种方法是使用CMake生成xcodeproj,然后使用“ sed”进行“搜索和替换”并以XCode喜欢的方式添加GameKit。
该脚本看起来像这样(对于Xcode 6.3.1)。
s#\/\* Begin PBXBuildFile section \*\/#\/\* Begin PBXBuildFile section \*\/\
26B12AA11C10544700A9A2BA \/\* GameKit.framework in Frameworks \*\/ = {isa = PBXBuildFile; fileRef = 26B12AA01C10544700A9A2BA \/\* GameKit.framework xxx\*\/; };#g
s#\/\* Begin PBXFileReference section \*\/#\/\* Begin PBXFileReference section \*\/\
26B12AA01C10544700A9A2BA \/\* GameKit.framework xxx\*\/ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System\/Library\/Frameworks\/GameKit.framework; sourceTree = SDKROOT; };#g
s#\/\* End PBXFileReference section \*\/#\/\* End PBXFileReference section \*\/\
\
\/\* Begin PBXFrameworksBuildPhase section \*\/\
26B12A9F1C10543B00A9A2BA \/\* Frameworks \*\/ = {\
isa = PBXFrameworksBuildPhase;\
buildActionMask = 2147483647;\
files = (\
26B12AA11C10544700A9A2BA \/\* GameKit.framework in Frameworks xxx\*\/,\
);\
runOnlyForDeploymentPostprocessing = 0;\
};\
\/\* End PBXFrameworksBuildPhase section \*\/\
#g
s#\/\* CMake PostBuild Rules \*\/,#\/\* CMake PostBuild Rules \*\/,\
26B12A9F1C10543B00A9A2BA \/\* Frameworks xxx\*\/,#g
s#\/\* Products \*\/,#\/\* Products \*\/,\
26B12AA01C10544700A9A2BA \/\* GameKit.framework xxx\*\/,#g
将此保存到“ gamecenter.sed”,然后像这样“应用”(它会更改您的xcodeproj!)
sed -i.pbxprojbak -f gamecenter.sed myproject.xcodeproj/project.pbxproj
您可能需要更改脚本命令以适合您的需求。
警告:随着项目格式的更改,它可能会因不同的Xcode版本而中断,(硬编码的)唯一编号可能不是真正唯一的-通常其他人的解决方案更好-因此,除非您需要支持Appstore +授权(和自动构建),请勿执行此操作。
这是一个CMake错误,请参阅http://cmake.org/Bug/view.php?id=14185和http://gitlab.kitware.com/cmake/cmake/issues/14185
link_directories
不鼓励使用,即使在其自己的文档中也是如此。我认为最好解决find_library
原始问题中的失败呼叫,或者使用@Andre的解决方案。