通常,类型PATH
的相对参数,如“lib”或“source / include”在CMake中使用当前变量值解析为绝对路径,例如:${CMAKE_INSTALL_PREFIX}
in命令INSTALL
的情况。但是,如果我想使用空的相对路径(或者根本不设置它),这将无法工作,因此生成的绝对路径等于${CMAKE_INSTALL_PREFIX}
- CMake生成器会抱怨不存在{{1}虽然没有理由无法解决它。
我知道这个问题有两个解决方法,但两者都有其缺陷阻止我实现目标:
DESTINATION
作为${CMAKE_INSTALL_PREFIX}
值。这正确地解决了路径,但是在DESTINATION
的情况下,生成的INSTALL(EXPORT)
中的路径是绝对的,这使得包不可重定位。使用Target.cmake
作为.
。这至少会在DESTINATION
内生成相对路径,但路径不正确。 Target.cmake
显然被视为常规文件夹,在生成.
的过程中,当确定Target.cmake
时,CMake会剥离一个文件夹组件:
_IMPORT_PREFIX
还有其他解决方法吗?你认为缺乏空的相对路径可能被视为一个错误吗?
答案 0 :(得分:0)
我认为我为此找到了一些解决方案。这将强制cmake生成导出文件,其中const CustomCellOne = () => (
<Query query={my_query} variables={ vars }>
{({ loading, error, data }) => {
const dataPoints = data.blahQuery;
return (
<CustomCellTwo data={dataPoints} />
)
}}
</Query>
);
设置为导出cmake的当前位置。
在安装和导出序列之前,按如下所示修改CMAKE_INSTALL_PREFIX:
_IMPORT_PREFIX
在set(CMAKE_INSTALL_PREFIX "\${CMAKE_CURRENT_LIST_FILE}/..")
之前的\
符号此时无法评估变量引用${CMAKE_CURRENT_LIST_FILE}
,它只是作为字符串传递。
之后,在导出的cmake中,您将获得:
${CMAKE_CURRENT_LIST_FILE}
您需要在末尾添加set(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}/..")
,因为/..
函数会将set
设置为导出cmake的完整路径以及cmake文件名(例如{{1 }}),因此_IMPORT_PREFIX
将掉落C:/Works/project/ext/library/Library.cmake
。完美的结果是仅强制cmake在导出的文件中使用/..
,例如:
/Library.cmake
但是正如我在评论中提到的那样,关于cmake的实现可能是不可能的。
我不知道修改get_filename_component
是否没有任何负面影响。在UNIX平台上,您可以尝试使用get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
代替CMAKE_INSTALL_PREFIX
作为DESTDIR
的参数,但是我没有尝试过。
答案 1 :(得分:0)
CMAKE_CURRENT_LIST_DIR
对我有用。无需添加 /..
。
@[Marek Kijo] - 感谢您的解决方案:
set(CMAKE_INSTALL_PREFIX "\${CMAKE_CURRENT_LIST_FILE}/..")