Boost 使用bjam进行简单安装

Boost 使用bjam进行简单安装,boost,boost-build,bjam,Boost,Boost Build,Bjam,我是boost.build新手,虽然bjam在大多数编译任务中都很容易使用,但我不知道如何做一些非常简单的事情:在系统中安装我的应用程序 假设我有一个非常简单的项目,树中有两个文件(除了Jamroot) 一个C++程序称它打印了/ETC/Hello、CONF的内容。 hello.conf:默认的hello.conf 我想做的是: 能够编译和链接hello.cpp,而无需在系统范围内安装任何东西 当使用安装目标调用时(并且仅在那时): 将可执行文件hello复制到/usr/bin 将hel

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

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

    一个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 ;
exe hello:hello.cpp;
别名安装:安装bin安装等;
安装bin:hello:/usr/bin;
安装etc:hello.conf:/etc;
我的问题是,作为一个用户,我不能写入/etc或/usr/bin,我希望只有在明确调用安装目标时才能这样做,而不是每次键入bjam时都这样做


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

除了两个问题外,您所写的内容似乎很好。首先,最后一行应为:

install install-etc : hello.conf : <location>/etc ;
explicit install install-bin install-etc ;
install-etc:hello.conf:/etc;
显式安装箱安装等;

其次,
install
别名应同时引用
install bin
install etc
。当您进行这些更改时,事情是否正常?

谢谢。它解决了“如何复制配置文件部分”(正如您所指出的,毕竟这只是我忘记键入install作为target:-(我删除了问题的这一部分)的一种打字错误。它并没有解决另一个问题:如何仅在显式调用给定目标时执行安装,并且默认情况下不执行安装。它可能也很简单,只需添加一些规则即可:-(添加“显式安装bin install etc;”JamfileOK中的任意位置,这绝对是我想要的。(如果你可以编辑你的答案,那就太好了,因为答案只是在注释中)。我仍然想知道为什么bjam会在allready存在时执行一个链接来安装,而不是复制文件,但这并不是一个真正的问题(它还可以避免在Linux上停止并重新启动exe,但我不确定这是否是出于设计,看起来像是一个副作用)。