【发布时间】:2018-01-26 19:40:20
【问题描述】:
一般来说,PATH 类型的相对参数,如“lib”或“source/include”在 CMake 中使用变量的当前值解析为绝对路径,例如:${CMAKE_INSTALL_PREFIX} 在命令 @ 的情况下987654323@。但是,如果我想使用空的相对路径(或根本不设置它),这不起作用,因此生成的绝对路径等于 ${CMAKE_INSTALL_PREFIX} - CMake 生成器会抱怨不存在的 DESTINATION,尽管没有理由不能解决。
我知道此问题的两种解决方法,但两者都有其缺陷,使我无法实现我的目标:
- 使用
${CMAKE_INSTALL_PREFIX}作为DESTINATION值。这正确解析了路径,但在INSTALL(EXPORT)的情况下,生成的Target.cmake中的路径是绝对的,这使得包不可重定位。 -
使用
.作为DESTINATION。这至少会在Target.cmake内部生成相对路径,但路径不正确。.显然被认为是一个普通文件夹,而在Target.cmake生成过程中,当_IMPORT_PREFIX被确定时,CMake过度剥离了一个文件夹组件:# Compute the installation prefix relative to this file. get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
还有其他解决方法吗?你认为缺少空的相对路径会被认为是一个错误吗?
【问题讨论】:
-
你的 CMake 版本是什么?
-
3.8,但是 cmake 版本有变化吗?
-
我有同样的问题,我在查看 cmake 源代码中导出文件生成期间发生的情况后才发现您的问题。所以我认为没有选择只生成导出,其中_IMPORT_PREFIX 被简单地设置为“${CMAKE_CURRENT_LIST_FILE}”。我不知道为什么,对我来说,这似乎也是很常见的用例,你有一个包含库二进制文件、包含文件和 cmake 导出文件的包来导入它,而且它不必被硬固定在文件系统的某个地方。跨度>
标签: cmake