【问题标题】:Export target property with absolute filepath使用绝对文件路径导出目标属性
【发布时间】:2022-12-18 03:00:23
【问题描述】:

我想从一个具有附加属性“my_special_file”的项目中导出并安装一个库目标:

        add_library(my_lib INTERFACE)
        # my_file.json will be installed next to the exported .cmake target/package config files.
        set_target_properties(my_lib PROPERTIES
            my_filepath "relative/to/targets.cmake/my_file.json"
        )
        set_property(TARGET my_lib  APPEND PROPERTY EXPORT_PROPERTIES "my_filepath ")

在我想写的消费项目中:

get_target_property(my_filepath my_lib my_filepath)
# my_filepath shall now be an absolute file path

或者在生成器表达式中:

set(some_variable "$<TARGET_PROPERTY:my_lib,my_filepath>")

如何让 CMake 导出 my_filepath 使其成为安装树下的绝对路径?我不希望我的包的用户连接路径。

【问题讨论】:

  • (我的乘车想法):使用 $&lt;BUILD_INTERFACE:...&gt;$&lt;INSTALL_INTERFACE:...&gt;$&lt;INSTALL_PREFIX&gt; 帮助 CMake 计算正确的安装路径。
  • 好主意。这是我已经尝试过的结果:CMake Error: Target "my_lib" contains property "my_filepath" in EXPORT_PROPERTIES but this property contains a generator expression. This is not allowed.
  • 呃,这是一个奇怪的限制。备选方案:不要导出属性,使用file(GENERATE)configure_package_config_file 以正确的路径填充变量,然后在包配置文件中使用set_target_properties 来分配属性。
  • 最后很简单。贴出解决方案。不管怎么说,还是要谢谢你。

标签: cmake


【解决方案1】:

结果证明解决方案很简单:

set_target_properties(my_lib PROPERTIES
            my_filepath "${_IMPORT_PREFIX}/path/to/my_file.json"
)

转义 ${_IMPORT_PREFIX} 会导致 CMake 仅在读取导出的 .cmake 目标文件时才解释该变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2011-07-09
    • 2011-06-09
    相关资源
    最近更新 更多