【问题标题】:cmake "make install" to remote machine?cmake“make install”到远程机器?
【发布时间】:2012-02-16 18:03:57
【问题描述】:

使用make install,我可以将我的二进制文件、配置等复制到目标文件夹以供执行。

现在我有以下情况:我们将虚拟机设置为 构建主机,并将不同的真实 Linux 机器设置为 目标平台

我想让make install 将文件直接复制到我的远程计算机上的文件夹中(通过scp 或类似方法)。我怎样才能做到这一点?

【问题讨论】:

  • 好吧,让 make 执行 scp.

标签: linux installation cmake


【解决方案1】:

你经常可以这样做

 make install DESTDIR=/tmp/mydest/

然后归档该目标目录

 tar czvf /tmp/mydest.tgz -C /tmp mydest

然后将该存档复制到远程位置

 scp /tmp/mydest.tgz remote:tmp/

最后,在远程解压存档并复制到合适的地方

【讨论】:

  • 其实我想阻止所有这些中间步骤。我猜cmake使用复制(cp)命令来复制文件。必须以某种方式告诉 cmake 使用 scp 代替...
  • 源代码通常带有一个名为“README”的文件。该文件的内容可能会提供线索。例如 pcre-8.39 建议使用 make dist 和/或 make distcheck 来制作 tarball。
  • @Basile Starynkevitch 为什么不直接在适当的地方解压而不需要复制步骤?
【解决方案2】:

make 可以在安装过程中使用特定前缀进行操作:

  make prefix=$dest/usr install

解决问题的方法是

  • 在你的构建机器上挂载目标机器的文件系统。这可以通过 nfs(持久)或 sshfs(更简单)来完成,
  • 将 $dest 设置为挂载点并运行上面的命令

【讨论】:

  • 前缀似乎没有任何作用。 DESTDIR 有效(如在另一个答案中一样。)但是,安装是使其一次全部工作的方法(并且服务器可以使用 SSH 安装远程访问本地网络计算机。)
【解决方案3】:

使用cmake 2.8.14,命令“add_custom_command”到CMakeLists.txt,也可以使用:

add_custom_command(TARGET my_target POST_BUILD COMMAND scp $<TARGET_FILE:my_target> user@remote_host:dest_dir_path )

优点:仅在重建目标时调用。

【讨论】:

    【解决方案4】:

    我正在使用这个解决方案:

    install (CODE "execute_process(COMMAND scp -r -i /home/user/.ssh/id_rsa ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/. user@remote:/path/to/copy/)")
    

    然后我运行命令make install 它就可以了

    我知道 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} 不是最好的变量,但对我来说没问题

    【讨论】:

      【解决方案5】:

      使用user 机器上的用户配置文件remote 和预先配置的ssh 密钥:

        install(CODE "execute_process(COMMAND /usr/bin/rsync -avh ${INSTALL_DIR} user@remote:/home/user/)")
      

      仅当调用 make install 时才将本地安装的二进制文件复制到远程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-30
        • 2013-01-24
        • 2021-11-04
        • 1970-01-01
        • 2016-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多