在哪里放置带有automake的预制二进制文件?

时间:2011-04-10 23:37:48

标签: c++ packaging autotools automake ampl

我在部分基于related question on helper-scripts撰写此问题。

我有一个用autotools构建的C ++软件系统。对于其功能的一小部分,我的系统使用闭源预构建二进制文件:AMPL。我是他们软件的免费学生版。假设我在C ++代码中调用的AMPL二进制文件的名称是ampl-student。我使用system(...)调用在我的代码中运行它。

当运行“make install”时,我希望ampl-student与我编译的C ++代码的二进制文件一起移动到/usr/bin。我应该在 Makefile.am 中添加ampl-student。我应该将它添加到bin_PROGRAMS变量吗?

我应该将ampl-student放在/usr/bin中。是否有更适合“辅助二进制”的地方?

我认为这通常是一个坏主意,因为将预先构建的二进制文件与代码一起分发并不能保证二进制文件将在最终用户的计算机上运行。但在这种情况下,用户群非常小,我碰巧知道他们都使用相同的系统配置。因此,我们实际上使用deb软件包来保证每个人都对软件系统的新版本进行更新。

编辑1:我应该强调,问题首先是要求在autotools使用的 Makefile.am 文件中指定ampl-student的位置。

2 个答案:

答案 0 :(得分:6)

我会在$(pkglibexecdir)中安装它:

pkglibexec_PROGRAMS = ampl-student

# If you need to know the path in your code
AM_CPPFLAGS = -DPKGLIBEXECDIR=\"$(pkglibexecdir)\"

这不是一个真正的用户程序,因此将其安装在某个地方。默认情况下,这将是$(prefix)/libexec/$(package)

答案 1 :(得分:0)

这实际上取决于您是要发送软件还是将其本地安装在/ usr / bin中,并且所有用户都将从那里访问该软件。

  1. 如果您要在/ usr / bin中安装它并且想要将AMPL放在那里,请为路径定义一个符号常量并使用它。
    #define AMPL / usr / bin / ampl-student
    无论您要使用哪个源文件,都可以添加,
    系统(AMPL);
      
  2. 如果要发送代码的二进制文件,则应将Ampl-bin放在软件的bin目录中或创建目录。结构为:
  3. <你的工具> / src
    <你的工具> / bin - 你也可以把这里的学生放在这里 <您的工具> /第三方/< tool1> ....< tooln> / bin /你可以把Ampl-student放在这里

    正如您在分发Ampl-student之前所正确提到的那样,它可以在该工具运行的所有平台上运行。