【发布时间】: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 使其成为安装树下的绝对路径?我不希望我的包的用户连接路径。
【问题讨论】:
-
(我的乘车想法):使用
$<BUILD_INTERFACE:...>、$<INSTALL_INTERFACE:...>和$<INSTALL_PREFIX>帮助 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