CMake:如何在OS X下将私有框架复制到应用程序包中?

时间:2009-12-08 23:03:35

标签: macos frameworks cmake

我们构建了几个私有框架,这些框架在我们的Xcode构建过程中被复制到我们的应用程序包中。我正在将整个构建过程转移到CMake,这是我无法解决的一个领域。

我找到了一个实用程序模块:CMakeIngestOSXBundleLibraries.cmake,但我有点不清楚如何使用它,或者它是否符合我们的要求。我希望每次应用程序在链接后构建时都会运行它。这让我相信我应该做像

这样的事情
IF (APPLE)
 add_custom_command( TargetName  POST_BUILD CMakeIngestOSXBundleLibraries.cmake )
ENDIF (APPLE) 

但我不认为这是对的。有人有这方面的经验吗?

1 个答案:

答案 0 :(得分:1)

这就是我正在做的事情:

1)在我的框架CMakeLists.txt文件中,我有以下内容:

IF (APPLE)
       SET_TARGET_PROPERTIES( MyFramework PROPERTIES FRAMEWORK true)
       SET_TARGET_PROPERTIES( MyFramework PROPERTIES
           XCODE_ATTRIBUTE_INSTALL_PATH @executable_path/../Frameworks/  )
ENDIF (APPLE)

第二个“set_target_properties”行将框架配置为 始终在框架中的应用程序包中查找 子文件夹中。

2)在我的顶级CMakeLists.txt文件中,我添加了一个统一的二进制文件 输出目录:

SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin)
SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )
SET (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Bin )

3)然后,在我的应用程序的CMakeLists.txt文件中,我有以下内容:

IF (APPLE)
       ADD_CUSTOM_COMMAND(
               TARGET MyApp
               POST_BUILD
               COMMAND ${PYTHON_EXECUTABLE}
               ARGS ${CMAKE_HOME_DIRECTORY}/CopyFramework.py
               --binary ${PROJECT_BINARY_DIR}/Bin
               --framework MyFramework.framework
               --app MyApp.app

    )
ENDIF (APPLE)

这会调用我的python脚本,它执行汇编工作 src和dest路径,实际上是复制框架。

最后的诀窍是,因为这是Mac唯一的东西,我可以依靠 Python脚本中的Xcode环境变量:

           config= os.environ["CONFIGURATION"]

这允许我组装实际二进制文件的完整路径 框架和应用程序的位置。

我希望的一件事就是有一个CMake变量 在上下文中扩展到当前的Config ADD_CUSTOM_COMMAND ......不必诉诸于使用 Xcode环境变量。