2009-10-29 41 views
1

我是boost.build newby,而bjam对于大多数编译任务来说非常容易使用,而且我没有弄清楚如何做一些应该很简单的事情:在系统中安装我的应用程序。使用bjam简单安装

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

  • HELLO.CPP:C++程序说,它打印/etc/hello.conf的内容

  • hello.conf:默认hello.conf

我想要什么做的是:

  • 可以编译和无需安装任何系统范围
  • 链接HELLO.CPP
  • 当与安装目标(只有这样)呼吁:
    • 副本可执行招呼到/ 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。

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

回答

3

你写的东西似乎很好,除了两个问题。首先,最后一行应改为:

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

其次,install别名应同时参考install-bininstall-etc。当你做出这些改变时,做一些事情吗?

+0

谢谢。它解决了“如何复制配置文件部分”(正如你所指出的那样,毕竟它只是一种从我忘记键入安装为目标的错字:-(我删除了这部分问题),它并没有解决另一个问题是:如何仅在明确调用给定目标时执行安装,而不是默认执行安装,这可能也像添加一些规则一样简单:-( – kriss 2009-10-30 14:47:53

+0

在任何地方添加“显式安装install-bin install-etc;” Jamfile – 2009-10-30 19:28:18

+0

好的,这绝对是我在找的东西(如果你可以编辑你的答案,那将是很好的,因为答案只是在评论中)我仍然想知道为什么bjam执行链接来安装,而不是在文件准备好时复制文件存在,但这不是一个真正的问题(它也避免了在Linux上停止并重新启动正在运行的exe文件,但我不确定它是否是设计的,看起来像是一种副作用)。 – kriss 2009-11-01 21:05:05