【问题标题】:simple install using bjam使用 bjam 简单安装
【发布时间】:2009-10-29 10:59:14
【问题描述】:

我是 boost.build newby,虽然 bjam 很容易用于大多数编译任务,但我不知道如何做一些应该非常简单的事情:在系统中安装我的应用程序。

假设我有一个非常简单的项目,树中有两个文件(除了 Jamroot)。

  • hello.cpp : 一个 C++ 程序说它打印 /etc/hello.conf 的内容

  • hello.conf:默认的 hello.conf

我想做的是:

  • 无需在系统范围内安装任何东西即可编译和链接 hello.cpp
  • 使用安装目标调用时(并且仅在那时):
    • 将可执行的 hello 复制到 /usr/bin
    • 将 hello.conf 复制到 /etc。

下面是我开始写的bjam:

exe hello : hello.cpp ;
alias install : install-bin  install-etc ;
install install-bin : hello : <location>/usr/bin ;
install install-etc : hello.conf : <location>/etc ;

我的问题是,作为用户,我无法写入 /etc 或 /usr/bin,并且我希望仅在明确调用安装目标时才执行此操作,而不是每次键入 bjam。

将安装和构建阶段分开对我来说非常重要,因为构建阶段应使用用户权限完成,安装阶段应使用管理员权限完成。

【问题讨论】:

    标签: boost boost-build bjam


    【解决方案1】:

    你写的看起来不错,除了两个问题。首先,最后一行应该是:

    install install-etc : hello.conf : <location>/etc ;
    explicit install install-bin install-etc ;
    

    其次,install 别名应该同时指代install-bininstall-etc。当您进行这些更改时,一切正常吗?

    【讨论】:

    • 谢谢。它解决了“如何复制配置文件部分”(正如您所指出的,毕竟这只是我忘记输入 install 作为目标的一种错字:-(我删除了这部分问题)。它没有解决另一个问题:如何仅在显式调用给定目标而不是默认情况下执行安装。它可能也像添加一些规则一样简单:-(
    • 在 Jamfile 的任何地方添加“显式安装 install-bin install-etc ;”
    • 好的,这绝对是我想要的。 (如果您可以编辑答案,那就太好了,因为答案仅在评论中)。我仍然想知道为什么 bjam 在文件已经存在时执行安装链接而不是复制文件,但这并不是一个真正的问题(它也避免了在 Linux 上停止并重新启动运行 exe,但我不确定它是设计使然,看起来像副作用)。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多