【问题标题】:Where to put pre-built binaries with automake?使用 automake 将预先构建的二进制文件放在哪里?
【发布时间】:2011-08-02 16:41:40
【问题描述】:

我写这个问题的部分原因是related question on helper-scripts

我有一个使用自动工具构建的 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。 p>

【问题讨论】:

    标签: c++ packaging autotools automake ampl


    【解决方案1】:

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

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

    它并不是一个真正的用户程序,所以这会将它安装在不碍事的地方。默认情况下,这将是$(prefix)/libexec/$(package)

    【讨论】:

      【解决方案2】:

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

      1. 如果您要将它安装在 /usr/bin 中并且也想将 AMPL 放在那里,请为路径定义一个符号常量并使用它。
        #define AMPL /usr/bin/ampl-student
        您可以添加任何您想使用的源文件,
        系统(AMPL);
      2. 如果您想发布代码的二进制文件,则应将 ampl-bin 放在软件的 bin 目录中或创建一个目录。结构为:

      /src
      /bin - 你也可以把 ampl-student 放在这里
      /third-party/ ..../bin/你可以把ampl-student放在这里

      正如您在分发 ampl-student 之前正确提到的,请确保它适用于应该运行该工具的所有平台。

      【讨论】:

      • 感谢您的回答。但是,我更多的是询问要向 Makefile.am 添加什么以指定这些预构建二进制文件的好位置,以便在运行 make install 或在 Ubuntu 中安装 deb 包时,ampl-student 文件结束某个有意义的地方(我认为 /usr/bin 是有意义的,但我不确定)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      相关资源
      最近更新 更多