gpt4 book ai didi

xcode - 使用 CMake 为多个可执行文件添加不同的 Xcode 资源

转载 作者:行者123 更新时间:2023-12-03 21:30:00 35 4
gpt4 key购买 nike

背景:我正在使用 CMake 配置一个构建库和应用程序组合的项目。每个应用程序都使用该应用程序独有的资源文件,例如图像和文本文件。 Xcode 理解资源文件的概念,可以正确地将它们复制到应用程序包中。如果我正在创建一个只有一个应用程序的项目,那将没有问题:我可以使用 CMake 的 set_source_files_properties(... PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 告诉 Xcode 将文件放入包的 Resources 目录中,以便稍后调用 [[NSBundle mainBundle] pathForResource:...] 将正确找到它们。 (pathForResource 方法默认搜索“Resources”目录。)这些文件也出现在 Xcode 项目的 Resources 组中。

问题 当我在 CMake 项目中包含多个应用程序时出现问题。每个项目都需要将自己的、不同的资源文件复制到自己的包的 Resources 目录中。因此,每个应用程序在 Xcode 中都需要一个不同的资源组来保存这些文件并从中复制它们。然而,这些不同的目录必须全部命名为“Resources”。理想情况下,Xcode 中的每个特定于应用程序的文件夹都将拥有自己独特的“Resources”子目录,其中包含所有需要的资源。实际情况是,该项目有一个共享的 Resources 目录,其中收集了所有资源文件,而特定于项目的“Resources”子目录仅包含该应用程序的 info.plist 文件。因为所有应用程序的资源都被扔到同一个组中,并且可能会发生名称冲突(两个项目具有相同名称的不同文件),项目包无法获得正确的资源文件。

有没有人找到使用 CMake 来设置支持具有不同资源的多个应用程序的 Xcode 项目的方法?或者其他一些解决方法?

最佳答案

我的解决方案对我有用,但也许这对您来说并不令人满意。

我所做的是一个简单的在构建步骤后复制文件,我将我的资源直接复制到构建的 Target.app 中。

我的方法的问题是文件没有出现在 Xcode 项目中。

这是我的做法:

我覆盖了 ADD_EXECUTABLE 宏。在内部,它计算资源变量 ${target}_RESOURCES。

因此,在我的目标的 CMakeLists.txt 中,我收集了一些目录资源文件,并将它们作为列表存储在我的目标中,具体取决于资源变量。

以下自定义命令在我的宏中(实际上可以在任何地方):

ADD_CUSTOM_COMMAND( TARGET ${target} POST_BUILD 
COMMAND ${CMAKE_COMMAND} -DFILES_LIST="${${target}_RESOURCES}" -DDESTINATION="\${TARGET_BUILD_DIR}/\${FULL_PRODUCT_NAME}" -DEXCLUDE_EXT=".svn .git CVS .DS_Store" -P ${ROOT_DIR}/cmake/scripts/copyFiles.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
COMMENT "Copying resource files and directories to iOS App Bundle..." )

它调用我的复制文件脚本(也许有更好的方法来添加自定义构建步骤):

SEPARATE_ARGUMENTS( FILES_LIST )

FOREACH( ENTRY ${FILES_LIST} )
MESSAGE( "copying: ${ENTRY} to ${DESTINATION}" )
FILE( COPY ${ENTRY} DESTINATION ${DESTINATION} PATTERN "${EXCLUDE_EXT}" EXCLUDE )
ENDFOREACH( ENTRY )

它对我有用。我真的不在乎资源是否出现在 XCode 项目中。

但我还是很想知道。在 Xcode 中没有文件时是否有任何问题或问题?

关于xcode - 使用 CMake 为多个可执行文件添加不同的 Xcode 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13422202/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com