INSTALL参数DESTINATION可以为空吗?

时间:2017-08-18 07:45:32

标签: cmake

通常,类型PATH的相对参数,如“lib”或“source / include”在CMake中使用当前变量值解析为绝对路径,例如:${CMAKE_INSTALL_PREFIX} in命令INSTALL的情况。但是,如果我想使用空的相对路径(或者根本不设置它),这将无法工作,因此生成的绝对路径等于${CMAKE_INSTALL_PREFIX} - CMake生成器会抱怨不存在{{1}虽然没有理由无法解决它。

我知道这个问题有两个解决方法,但两者都有其缺陷阻止我实现目标:

  1. 使用DESTINATION作为${CMAKE_INSTALL_PREFIX}值。这正确地解决了路径,但是在DESTINATION的情况下,生成的INSTALL(EXPORT)中的路径是绝对的,这使得包不可重定位。
  2. 使用Target.cmake作为.。这至少会在DESTINATION内生成相对路径,但路径不正确。 Target.cmake显然被视为常规文件夹,在生成.的过程中,当确定Target.cmake时,CMake会剥离一个文件夹组件:

    _IMPORT_PREFIX
  3. 还有其他解决方法吗?你认为缺乏空的相对路径可能被视为一个错误吗?

2 个答案:

答案 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}/..")