【问题标题】:CMake rename executable target at install stage or create symlinkCMake 在安装阶段重命名可执行目标或创建符号链接
【发布时间】:2020-05-03 09:03:59
【问题描述】:

我尝试了多种方法:

  1. install(TARGETS tgt RUNTIME DESTINATION /usr/bin RENAME another_name) 忽略 RENAME 而没有任何警告。文档中没有关于 RENAME for TARGETS 的说法。
  2. add_executable(zbus-publish ALIAS zbus-example-publisher) 给出错误

    install TARGETS given target "zbus-publish" which is an alias.

  3. 试图将符号链接安装到已安装的目标

    install(CODE "execute_process(COMMAND ln -s zbus-example-publisher  ${DESTDIR}/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/zbus-publish
                                  COMMAND ln -s zbus-example-subscriber ${DESTDIR}/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/zbus-subscribe)
          message(==================================================)"
    

    但它将 DESTDIR 扩展为空。

我需要 DESTDIR,因为使用 make DESTDIR=xxxx 来测试我的安装。非常方便。在交叉编译时也很有用。

CMake 版本 3.17.2

【问题讨论】:

  • 为什么需要在安装时“重命名”它?为什么不从一开始就有想要的名字? :) 请更详细地描述您的情况。
  • 而 JFYI,RENAME 适用于 install(FILES...),不适用于 install(TARGETS...)
  • "但是它将 DESTDIR 扩展为空。" - 所以你的具体问题是关于处理install(CODE) 中的DESTDIR 而不是general 中的符号链接,不是吗?
  • 另一个仅供参考(和提示)DESTDIR 是一个 GNU Make 变量——意思是 不是 CMake :) 并且 GNU Make 通过 environment传递它> 到子流程。
  • 另一个提示:cmake -E create_symlink ... 是一种可移植的方式来制作符号链接。

标签: cmake


【解决方案1】:

我找到了答案here

您可以通过以下方式使用 set_target_properties() 函数和 PREFIX / OUTPUT_NAME / SUFFIX 属性更改前缀、输出名称和后缀:

前缀:

set_target_properties(new_thing PROPERTIES PREFIX "")

输出名称:

set_target_properties(new_thing PROPERTIES OUTPUT_NAME "better_name")

后缀:

set_target_properties(new_thing PROPERTIES SUFFIX ".so.1")

这不是我想要的。但在特殊情况下有效。
我想保持OUTPUT_NAMEs 原样并在install 期间创建符号链接。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2018-09-06
    • 2014-07-14
    • 2012-08-05
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多