【问题标题】:Cmake Xcode add extension via new copy files phaseCmake Xcode 通过新的复制文件阶段添加扩展
【发布时间】:2018-02-22 08:36:08
【问题描述】:
我正在尝试使用 cmake (3.8.0) 构建一个 Xcode 9 项目。它由一个app target和一个appex(extension)target组成,需要通过Build Phases中的“Copy Files Phase”(或“Embed App Extension Phase”)复制到app的Plugins目录中。
我尝试了几次尝试,比如打电话
set_source_files_properties(${myFile} PROPERTIES MACOSX_PACKAGE_LOCATION PlugIns)
但到目前为止没有运气。
我认为困难(对于 cmake)是实际文件“myExtension.appex”是在构建时创建的,因此硬编码将其添加为源文件的路径似乎不起作用。
任何帮助将不胜感激!
【问题讨论】:
标签:
xcode
cmake
ios-app-extension
macos-app-extension
【解决方案1】:
我们只是设法以一种奇怪的方式解决了这个问题(如果你已经解决了这个问题,让它成为其他任何人的解决方案——比如我——试图解决这个问题)
当你在项目中嵌入一个 appex 时,Xcode 基本上改变了项目中的两件事:将 appex 添加为项目的依赖项,并添加一个 PBXCopyFilesBuildPhase 以确保编译后的 .appex 最终出现在插件的 PlugIns 文件夹中。结果包。
所以我们模仿了这两个步骤。将依赖项添加到 appex 很容易:
add_dependencies("${_PROJECT_NAME}" ${APP_EXTENSION_TARGET})
在我们的例子中,${EXTENSION} 实际上是一个包含我们所有扩展的列表,所以你知道它也可以工作。
这将确保扩展在主应用程序之前构建。现在,为了确保它们放置在正确的位置,我们在应用程序 CMakeLists.txt 中添加了一个自定义 POST_BUILD 命令,如下所示:
add_custom_command(TARGET "${target}" POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -E copy_directory "${PATH_TO_APPEX}" "$<TARGET_FILE_DIR:${target}>/PlugIns/${APPEX_FILE_BASENAME}" MAIN_DEPENDENCY "${APPEX_NAME}")
所有这些都有一些帮助代码,但这就是它的要点。
希望有帮助!
【解决方案2】:
在存档构建的情况下,您可以使用$(CONFIGURATION_BUILD_DIR)/$(CONTENTS_FOLDER_PATH) 而不是$<TARGET_FILE_DIR:${target}>。