macos - 为 MacOS 框架安装 CMake 包配置文件
问题描述
我用 CMake 创建了一个版本化的 MacOS 框架,并偶然发现了在哪里安装包配置文件sample-config.cmake
的问题sample-config-version.cmake
,,,, sample-exports.cmake
.sample-exports-release.cmake
框架是版本化的,所以结构大致如下:
<sample.framework>
|-- Headers # link to Versions/Current/Headers
|-- Resources # link to Versions/Current/Resources
+-- Versions
|-- Current # link to B
+-- B
|-- Headers
+-- Resources
|-- CMake
+-- Info.plist
我使用 CMakes宏从包含内容CMakePackageConfigHelpers
的模板生成包配置文件sample-config.cmake.in
@PACKAGE_INIT@
include("${CMAKE_CURRENT_LIST_DIR}/sample-export.cmake")
CMake 没有提到版本化框架,建议将文件安装到目录Resources/CMake
中。
我这样做是通过调用
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/sample-config.cmake"
DESTINATION sample.framework/Resources/CMake
COMPONENT development
)
生成的文件如下所示:
####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
####### Any changes to this file will be overwritten by the next CMake run ####
####### The input file was sample-config.cmake.in ########
get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)
macro(set_and_check _var _file)
set(${_var} "${_file}")
if(NOT EXISTS "${_file}")
message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !")
endif()
endmacro()
macro(check_required_components _NAME)
foreach(comp ${${_NAME}_FIND_COMPONENTS})
if(NOT ${_NAME}_${comp}_FOUND)
if(${_NAME}_FIND_REQUIRED_${comp})
set(${_NAME}_FOUND FALSE)
endif()
endif()
endforeach()
endmacro()
include("${CMAKE_CURRENT_LIST_DIR}/sample-export.cmake")
错误:
Resources/CMake
无论我将这些文件安装到还是安装到,生成的配置文件都存在差异,Versions/B/Resources/CMake
尽管它们都指向同一个目录。
通过Resources
链接安装时Resources/CMake
,调用 setPACKAGE_PREFIX_DIR
生成为
`get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE)`
但是通过Versions/B/Resources/CMake
它安装时生成为
`get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../../../" ABSOLUTE)`
因此,find_package(sample CONFIG)
安装到Versions/B/Resources/CMake
.
以前有人遇到过这个错误吗?
感谢您对此的任何意见。
解决方案
推荐阅读
- rx-java2 - 如何在 RxJava 2 中访问和增加“rx2.buffer-size”?
- python - 用python绘制一个打印当前时间的时钟
- sql - 从日期中减去子字符串天数
- c# - 过滤给定单个对象的对象列表
- php - Laravel:检查输入字段为空或未提交
- python - MNIST 数据数组中的图像在哪里?
- facebook - Facebook Graph API - 已弃用的 publish_actions 替代方案
- node.js - 如何从 Hapi server.inject 正确捕获响应
- reactjs - Material UI - 日期选择器如何只能选择月/年
- python - 使用 urllib2 与 wget 在 python 中下载文件