这就是我正在做的事情:
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 文件中,我添加了 setup 一个统一的二进制文件
输出目录:
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 变量可以
在上下文中展开到当前配置
ADD_CUSTOM_COMMAND... 不必求助于使用
Xcode 环境变量。