2

我正在尝试使用 cmake (3.8.0) 构建一个 Xcode 9 项目。它由一个 app 目标和一个 appex(扩展)目标组成,需要通过 Build Phases 中的“Copy Files Phase”(或“Embed App Extension Phase”)将其复制到应用程序的 PlugIns 目录中。

我尝试了几次尝试,比如打电话 set_source_files_properties(${myFile} PROPERTIES MACOSX_PACKAGE_LOCATION PlugIns) ,但到目前为止没有运气。

我认为困难(对于 cmake)是实际文件“myExtension.appex”是在构建时创建的,因此硬编码将其添加为源文件的路径似乎不起作用。

任何帮助,将不胜感激!

4

2 回答 2

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}")

所有这些都有一些帮助代码,但这就是它的要点。

希望有帮助!

于 2018-02-28T14:53:02.610 回答
0

您可以使用$(CONFIGURATION_BUILD_DIR)/$(CONTENTS_FOLDER_PATH)而不是$<TARGET_FILE_DIR:${target}>存档构建。

于 2019-07-19T08:00:20.447 回答